2017-01-22 4 views
0

生のフォルダにmp3ファイルのコレクションがあります。各mp3はカテゴリに属します。そのカテゴリから、ユーザは再生する8つのmp3のうちの1つを選択することができる。例えば生ファイルを再生するメソッドを作成していますが、他のクラスからアクセスできるメソッドが必要です

: 1.mp3 2.mp3 3.mp3 4.m​​p3 5.mp3 6.mp3

mp3(1-3)、カテゴリスムースジャズ 一方に属しますmp3(3-6)はオルタナティブロックに属します。

各クラスで同じメソッドを繰り返しますが、主なアクティビティには、各クラスから呼び出すことができるメソッドが1つあります。

MediaPlayer mp3; 
public void musicPlayer(//Here is where I want to have a variable x){ 
    mp3 = MediaPlayer.create(this, R.raw.//Here is where variable x goes); 
    PhoneStateListener phoneStateListener = new PhoneStateListener() { 
     @Override 
     public void onCallStateChanged(int state, String incomingNumber) { 
      if (state == TelephonyManager.CALL_STATE_RINGING) { 
       mp3.pause(); 
      } else if(state == TelephonyManager.CALL_STATE_IDLE) { 
       mp3.start(); 

      } else if(state == TelephonyManager.CALL_STATE_OFFHOOK) { 
       mp3.pause(); 
      } 
      super.onCallStateChanged(state, incomingNumber); 
     } 
    }; 
    TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); 
    if(mgr != null) { 
     mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); 
    } 

メソッドmusicPlayerを別のクラスから呼び出すときに、変数xをインスタンス化する必要があります。

+0

[この* Stackoverflow *](http://stackoverflow.com/questions/413898/what-does-the-static-keyword-do-in-a-class)を確認してください。しかし、これは通常、良い方法ではありません。あなたのプロジェクトがどのようにレイアウトされているかに応じて、プロジェクトの実装を目に見えるようにするために、それらをコンストラクタの引数として送る方が良いです。 –

答えて

0

これは、特に8つの可能なMP3ファイルしか必要としないので、これは少しの労力で行うことができます。

  1. 「変数x」は、完全修飾「R」定数として渡すことができます。つまり、発信者は8つのアイテムのうちどれを渡すべきかを知る必要があります。実際には、ユーザーが何らかの形でR.rawのすべての候補を参照できるように変更すると、これはまだ機能します。しかし、 "x"変数はあなたが配置した場所にはあまり行きません。
  2. "変数x"はRオブジェクトにとって完全に知られていないものかもしれません。代わりにR.raw.whatever定数にマッピングするデコーダを使用できます。これはまた、可能な値をいくつかしか持たないことによって実現可能になる。残念ながら、このアプローチを使用すると、柔軟性が低下します。将来、これらのMP3をさらに追加すると、コードの変更(マッピングの拡張)が必要になります。ここでも、「x」変数は異なるものになります。

また、8つの可能性しかなく、おそらくすべてがR.rawディレクトリに存在するため、その方法に入るものを制御することはそれほど恐ろしいことではありません。

こちらがお役に立てば幸いです。

0

メソッドの再利用のために、xをクラス属性として別のクラスMusicPlayer()を作成し、クラスメソッドとしてmusicPlayerを作成する必要があります。たとえば、オブジェクトを作成することができます。メインメソッドを含むクラスのMusicPlayerタイプのmyMusicPlayer、またはmusicPlayerメソッドを呼び出す必要があるプロジェクトの他のクラスのいずれかにあります。

MusicPlayer.java

public class MusicPlayer{ 

    MediaPlayer mp3; 
    int x; 

    //ToDo: constructor(s) 
    //get and set methods for the Attributes of an object of type MusicPlayer (optional) 

    public void musicPlayer(){ 

    //ToDo: your code 
    } 

} 

MainClass.java

    ... 

MusicPlayer myMusicPlayer = new MusicPlayer(); 

        ... 

doSomethingWith(myMusicPlayer.x); 

        ... 

doSomethingWith(myMusicPlayer.mp3); 

幸運!

関連する問題