我正在用我的BroadcastReceiver
监听拨出电话。
当发出某些呼叫时,满足特定号码和/或条件 - 这无关紧要,我会拦截呼叫。
之后,我想拨打另一个号码的新电话。在这里我遇到了麻烦。未发出呼叫 - 没有任何反应 - 新活动已启动,但未启动呼叫。空视图,仅此而已。
顺便说一下,BroadcastReceiver 接收意图,然后调用并执行CallInitiatingActivity.onCreate()
。
广播侦听器
public class OutgoingCallListener extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (conditionsAreMet()) {
setResultData(null); //terminate current call
Inetent intent = new Intent(context, CallInitiatingActivity.class)
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
startActivity(intent);
}
}
}
呼叫发起活动
public class CallInitiatingActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + number));
startActivity(intent);
}
}
使用的权限:
<uses-permission android:name="android.permission.CALL_PHONE"/>
调试级别中的可疑登录:
checkAndCopyPhoneProviderExtras: some or all extras are missing.
我将其追溯到此类中 #2074 行的方法。
您可能需要确保您具有正确的权限:
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
添加可能会有所帮助
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
到意图。
您可以在清单中为 BroadcastReceiver 类定义操作.xml如下所示
<receiver android:name="yourBroadcastReceiverpackagename.BroadcastReceiverclassname"
android:exported="false">
<intent-filter>
<action
android:name="Declare your Action name here"/>
</intent-filter>
问题中的代码正常启动新调用。但我看不到这一点,因为BroadcastReceiver通过NEW_OUTGOING_CALL
行动接收意图。
那是当我创建ACTION_CALL
并放置额外内容来识别我手动创建了一个调用时,该调用的意图通过NEW_OUTGOING_CALL
操作"转换"为另一个意图。这样有效地失去了所有额外的东西。