从BroadcastReceiver发起新的电话呼叫

时间:2012-10-04 16:16:47

标签: android

我正在用我的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.

我将其追溯到this class第2074行的方法。

3 个答案:

答案 0 :(得分:0)

您可能需要确保拥有正确的权限:

<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>

可能有助于添加

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

意图。

答案 1 :(得分:0)

您可以在Manifest.xml中为此类

定义BroadcastReceiver类的操作
 <receiver android:name="yourBroadcastReceiverpackagename.BroadcastReceiverclassname" 
       android:exported="false">
 <intent-filter>
 <action 
       android:name="Declare your Action name here"/>
 </intent-filter>

答案 2 :(得分:0)

问题中的代码正常启动新呼叫。 但我无法看到,因为BroadcastReceiver通过NEW_OUTGOING_CALL动作接收意图。

那时我创建ACTION_CALL并添加额外内容以确定我手动创建了一个调用,意图被“转换”为另一个NEW_OUTGOING_CALL动作的意图。这样就有效地减少了所有额外的额外费用。