【发布时间】:2012-10-30 07:17:25
【问题描述】:
为了检测拨出电话何时被接听,我尝试创建一个PhoneStateListener 并监听来自this question 的TelephonyManager 的CALL_STATE_RINGING、CALL_STATE_OFFHOOK 和CALL_STATE_IDLE,但似乎没有工作,如下所述。
首先,我在清单中注册了以下权限:
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
然后,一个名为OutCallLogger 的BroadcastReceiver 在拨出电话时捕获NEW_OUTGOING_CALL 事件:
<receiver android:name=".listener.OutCallLogger">
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
接下来,我对OutCallLogger 的实现。我设置了一个名为noCallListenerYet 的布尔值,以避免在调用onReceive() 时将新的PhoneStateListener 附加到TelephonyManager。
public class OutCallLogger extends BroadcastReceiver {
private static boolean noCallListenerYet = true;
@Override
public void onReceive(final Context context, Intent intent) {
number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
if (noCallListenerYet) {
final TelephonyManager tm = (TelephonyManager) context.getSystemService(
Context.TELEPHONY_SERVICE);
tm.listen(new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
Log.d(This.LOG_TAG, "RINGING");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
Log.d(This.LOG_TAG, "OFFHOOK");
break;
case TelephonyManager.CALL_STATE_IDLE:
Log.d(This.LOG_TAG, "IDLE");
break;
default:
Log.d(This.LOG_TAG, "Default: " + state);
break;
}
}
}, PhoneStateListener.LISTEN_CALL_STATE);
noCallListenerYet = false;
}
}
}
现在,当我在我的设备中拨出电话时,CALL_STATE_RINGING 永远不会被调用。我总是只会在另一条线路开始响铃时打印出“IDLE”到“OFFHOOK”,什么也没有接听电话时,通话结束时再次打印“IDLE”。
我如何才能可靠地检测到在 Android 中何时接听了拨出电话,或者这是否可能?
【问题讨论】:
-
你找到答案了吗!!!即使我有同样的问题!!!!帮帮我!!!
-
我也有同样的问题你有解决办法吗?
-
伙计们,任何解决方案... 到目前为止,没有任何事件可以在接听电话时触发。