Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我正在创建一个播放原始文件的方法,但我需要从其他类访问该方法_Java_Android - Fatal编程技术网

Java 我正在创建一个播放原始文件的方法,但我需要从其他类访问该方法

Java 我正在创建一个播放原始文件的方法,但我需要从其他类访问该方法,java,android,Java,Android,因此,我的原始文件夹中有一组mp3文件。每个mp3都属于一个类别。从该类别中,用户可以从八个MP3中选择一个播放 例如: 1.mp3 2.mp3 3.mp3 4.mp3 5.mp3 6.mp3 mp3 1-3属于平滑爵士乐的范畴 而mp33-6属于替代岩 在每个类中重复相同的方法,我希望在主活动中有一个方法,我可以从每个类中调用它 MediaPlayer mp3; public void musicPlayer(//Here is where I want to have a variable

因此,我的原始文件夹中有一组mp3文件。每个mp3都属于一个类别。从该类别中,用户可以从八个MP3中选择一个播放

例如: 1.mp3 2.mp3 3.mp3 4.mp3 5.mp3 6.mp3

mp3 1-3属于平滑爵士乐的范畴 而mp33-6属于替代岩

在每个类中重复相同的方法,我希望在主活动中有一个方法,我可以从每个类中调用它

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。

我发现有两种方法可以轻松实现,特别是因为您只需要8个可能的MP3文件

变量x可以作为完全限定的“R”常量传入。这意味着调用方必须知道要传入的8项中的哪一项。事实上,如果您进行更改,以便用户能够以某种方式浏览R.raw中所有可能的候选对象,那么这仍然有效。但是,这意味着x变量并没有完全放在您放置它的地方。 变量x可能是R对象完全未知的东西,相反,您可以让解码器将其映射到R.raw.whatever常量。这也是可行的,因为只有几个可能的值。不幸的是,使用这种方法会降低灵活性。将来,如果要添加更多此类MP3,则需要进行代码更改扩展映射。同样,x变量也变得不同了。 此外,由于只有8种可能,并且所有可能都位于R.raw目录中,因此控制进入该方法的内容并不是一件可怕的事情


我希望这会有所帮助。

对于方法的可重用性,您应该创建一个单独的类MusicLayer,其中x作为类属性,MusicLayer作为类方法。然后,您可以在包含main方法的类或需要调用MusicLayer方法的项目的任何其他类中创建一个对象,例如MusicLayer类型的MyMusicLayer

e、 g

MusicPlayer.java

MainClass.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
    }

 }
                  ...

MusicPlayer myMusicPlayer = new MusicPlayer();

                  ...

doSomethingWith(myMusicPlayer.x);

                  ...

doSomethingWith(myMusicPlayer.mp3);