【发布时间】:2014-06-11 22:01:08
【问题描述】:
我正在为大学考试开发一个安卓应用程序。
我使用的是三星 Galaxy S3,带有原始 ROM,Android Jelly Bean 4.3。
我在检测拨出电话的“状态”时遇到问题。
我需要知道电话何时从我的应用程序“开始”和“停止”(拒绝与否),因为我必须暂停并重新启动音乐服务的播放歌曲。
我已经对来电进行了处理,并且以这种方式完美运行:
public void onReceive(Context context, Intent intent) {
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
if (state.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
if (Start.getMusicService().isPlaying()) {
pauseService();
isMusicPlaying = true;
}
}
else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
if (isMusicPlaying){
startService();
isMusicPlaying = false;
}
}
}
对于拨出电话,我在清单中注册接收者
<receiver android:name=".Music.OutgoingCallReceiver" >
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
并添加权限
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
我为接收器尝试了这个解决方案
public void onReceive(Context context, Intent intent) {
TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(new PhoneStateListener() {
public void onCallStateChanged(int state, String number) {
if (state == TelephonyManager.CALL_STATE_IDLE) {
if (Start.getMusicService().isPlaying()) {
pauseService();
isMusicPlaying = true;
}
}
else if (state == TelephonyManager.CALL_STATE_OFFHOOK) {
if (isMusicPlaying){
startService();
isMusicPlaying = false;
}
}
}
}, PhoneStateListener.LISTEN_CALL_STATE);
}
我已经阅读了其他问题,但我没有找到答案。
我希望你能帮助我。
安德烈亚
【问题讨论】:
-
onReceive 根本没有被调用?你是如何设置广播接收器的?
-
@Rarw 我用 onReceive 方法编辑我的问题。每次都正确调用它,但在方法中我无法做我需要的事情
-
如果你只是想在通话时调节应用的音量,你也可以使用音频焦点:developer.android.com/training/managing-audio/audio-focus.html
-
对于来电,如果应用程序关闭并且您在主屏幕上,这是否有效?我问是因为如果此接收器处于活动状态,一旦关闭应用程序以拨打电话,它就不会处于活动状态。
-
@ValentinRocher 我想暂停歌曲并在通话结束时从同一点重新开始。
标签: android phone-call