首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓片段和TelephonyManager

安卓片段和TelephonyManager
EN

Stack Overflow用户
提问于 2014-09-24 07:00:52
回答 1查看 535关注 0票数 2

我有一个问题,我正在使用一个通过MusicPlayer扩展片段来播放音乐的类,在这个类中使用PhoneStateListener和TelephonyManager来暂停音乐,如果有电话进来,一切都好,怀疑当我启动应用程序时,歌曲会自动开始,希望避免这种情况,有什么建议吗??下面是我的代码的一部分:

附言:很抱歉我的英语不好

代码语言:javascript
复制
public class FragmentPlaySong extends Fragment implements MediaPlayer.OnCompletionListener {

private MediaPlayer mediaPlayer;
...

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_play_song, container, false);

    mediaPlayer = new MediaPlayer();
    mediaPlayer.setOnCompletionListener(this);
    ...
    ...

    //Service MediaPlayer pause when Incoming Call
    PhoneStateListener phoneStateListener = new PhoneStateListener(){
        public void onCallStateChanged(int state, String incomingNumber){
            if (state == TelephonyManager.CALL_STATE_RINGING) {
                if (mediaPlayer != null){
                    if (mediaPlayer.isPlaying()){
                        mediaPlayer.pause();
                    }
                }
            } else if(state == TelephonyManager.CALL_STATE_IDLE) { //here start song when start application
                if (mediaPlayer != null){
                    if (!mediaPlayer.isPlaying()){
                        mediaPlayer.start();
                    }
                }
            } else if(state == TelephonyManager.CALL_STATE_OFFHOOK) {
                if (mediaPlayer != null){
                    if (mediaPlayer.isPlaying()){
                        mediaPlayer.pause();
                    }
                }
            }
            super.onCallStateChanged(state, incomingNumber);
        }
    };

    TelephonyManager mgr = (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE);
    if (mgr != null){
        mgr.listen(phoneStateListener,PhoneStateListener.LISTEN_CALL_STATE);
    }

    return view;
}
EN

回答 1

Stack Overflow用户

发布于 2014-09-24 07:18:21

它是由这个代码块中的代码启动的吗?

代码语言:javascript
复制
        } else if(state == TelephonyManager.CALL_STATE_IDLE) { //here start song when start application
            if (mediaPlayer != null){
                if (!mediaPlayer.isPlaying()){
                    mediaPlayer.start();
                }
            }
        }

如果是这样,你可能只需要有一个标志,例如

代码语言:javascript
复制
private boolean mPlaying;

当用户手动启动音乐时,将其设置为true,然后将上面的块更改为如下所示:

代码语言:javascript
复制
        } else if(state == TelephonyManager.CALL_STATE_IDLE) { //here start song when start application
            if (mediaPlayer != null){
                if (mPlaying && !mediaPlayer.isPlaying()){
                    mediaPlayer.start();
                }
            }
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26006031

复制
相关文章

相似问题

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