如何阻止Android手机拨打电话?PROCESS_OUTGOING_CALLS。

3

如何在特定时间阻止 Android 设备拨出某个号码的电话?我已经使用以下权限:android.permission.PROCESS_OUTGOING_CALLS,但接收者无法停止通话。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.CALL_PRIVILEGED" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />

     <receiver android:name=".receiver.NewOutgoingCallReceiver" android:exported="true"> 
        <intent-filter>
            <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> 
            <category android:name="android.intent.category.DEFAULT" /> 
        </intent-filter> 
    </receiver>

这是接收器的代码:

public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub
    String incomingNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
    Log.d("NewOutgoingCallReceiver",
            ">>>>>> Intent.EXTRA_PHONE_NUMBER: "
                    + incomingNumber);
    Toast.makeText(context, "Call - " + incomingNumber, Toast.LENGTH_LONG).show();
    abortBroadcast();
}

安卓系统仍在拨打电话。在此演示中,我只想让系统停止拨打所有电话。

setResultData(null); 就可以做到这一点...阻止呼叫的发生。 - andy
现在的问题是,当我想让Intent.ACTION_CALL负责拨打电话时...它会再次触发我的广播接收器并带回对话框...唯一的解决方法是告诉广播接收器忽略下一个android.intent.action.NEW_OUTGOING_CALL吗? - andy
1
android.permission.PROCESS_OUTGOING_CALLS 真的需要吗? - Elad Benda
1个回答

10

使用以下代码:

public void onReceive(Context context, Intent intent) {
 if (intent.getAction().equals(OUTGOING_CALL_ACTION)) {

          // get phone number from bundle
            String phoneNumber = intent.getExtras().getString(INTENT_PHONE_NUMBER);

            Toast.makeText(context, "Call:  "+phoneNumber+" - ABORTING CALL.", Toast.LENGTH_LONG).show();
            setResultData(null);
      }
    }

2
不需要使用abortBroadcast(),也不建议使用...只需要使用setResultData(null)即可...谢谢! - andy
1
“android.permission.PROCESS_OUTGOING_CALLS” 真的需要吗? - Elad Benda
你用 setResultData(null) 让我开心了。 - Duna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接