首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我正在创建一个播放原始文件的方法,但我需要从其他类访问该方法

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

Stack Overflow用户
提问于 2017-01-22 23:53:18
回答 2查看 29关注 0票数 0

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

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

mp3 (1-3)属于光滑爵士乐,mp3(3-6)属于另类摇滚。

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

代码语言:javascript
复制
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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-23 00:07:47

我看到了两种方法,这可以做到非常少的努力,特别是因为你只需要8个可能的MP3文件。

  1. “变量x”可以作为完全限定的'R‘常数传入。这意味着调用者必须知道要传递的8项中的哪一项。实际上,如果您进行更改,以便用户可以以某种方式浏览R.raw中所有可能的候选人,这仍然有效。但是,这意味着"x“变量并不完全适用于放置它的位置。
  2. “变量x”可能是R对象完全不知道的东西,相反,您可以让一个解码器将其映射到R.raw.whatever常量。这也是可行的,因为只有几个可能的值。不幸的是,使用这种方法使事情变得不那么灵活。将来,如果要添加更多这些MP3s,则需要进行代码更改(展开映射)。同样,"x“变量变成了不同的东西。

而且,由于只有8种可能性是可能的,而且所有可能都驻留在R.raw目录中,因此控制该方法中的内容并不是一件可怕的事情。

我希望这能帮到你。

票数 0
EN

Stack Overflow用户

发布于 2017-01-23 00:21:48

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

例如:

MusicPlayer.java

代码语言:javascript
复制
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

代码语言:javascript
复制
                  ...

MusicPlayer myMusicPlayer = new MusicPlayer();

                  ...

doSomethingWith(myMusicPlayer.x);

                  ...

doSomethingWith(myMusicPlayer.mp3);

祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41797472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档