我正在为大学考试开发一个Android应用程序 我使用三星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);
}
我已经读过其他问题买了我没找到答案 我希望你能帮助我。
安德烈
答案 0 :(得分:0)
制作程序来读取无线电的logcat, 命令:
logcat -d -b radio RILJ:D RILC:D *:S
在我的Android 2.3上,当拨打电话时输出:
06-11 20:38:43.051 D/RILJ ( 429): [4678]< GET_CURRENT_CALLS [id=1,ALERTING,toa=145,norm,mo,0,voc,noevp,,cli=1,,1]
当得到答案时:
06-11 20:38:50.300 D/RILJ ( 429): [4683]< GET_CURRENT_CALLS [id=1,ACTIVE,toa=145,norm,mo,0,voc,noevp,,cli=1,,1]
所以,为了检测更响应的传出呼叫, 我制作程序来捕获这些日志并检查它是否
contain time > time-when-make-outgoing-call, and
contains string "GET_CURRENT_CALLS" and "ACTIVE".
和...... IT工作,对我来说是sonyericsson-android 2.3。
我不知道它是否适用于其他设备和Android版本,你告诉我。