如何调用onReceive()来拒绝来电?

时间:2014-10-02 15:24:37

标签: java android broadcastreceiver android-manifest

我设法写了阻止来电的代码,但是它在另一个类中,我想在用户按下"是"时执行它。在对话框上。我如何调用onReceive()?我作为论点传达了什么意图?

这里是MainActivity的代码 -

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    activateButton = (Button)findViewById(R.id.activate);
    activateButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

                DialogBox();
        }
    });

}

protected void DialogBox() {
    box = new AlertDialog.Builder(this);
    box.setTitle("Reject incoming calls?").
            setMessage("On activation, your phone will reject all incoming calls").setCancelable(false)
            .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    //BLOCK CALLS

                }
            }).setNegativeButton("No", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int id) {
            dialog.cancel();
        }
    });
    final AlertDialog alert = box.create();
    alert.show();

}

这是扩展BroadcastReceiver的类。 onReceive保留拒绝呼叫的代码。

public class RejectCall extends BroadcastReceiver {

public void onReceive(Context context, Intent intent) {
    ITelephony telephonyService;
    TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    try {
        Class c = Class.forName(tm.getClass().getName());
        Method m = c.getDeclaredMethod("getITelephony");
        m.setAccessible(true);
        telephonyService = (ITelephony) m.invoke(tm);
        Bundle bundle = intent.getExtras();
        String phoneNumber = bundle.getString("incoming_number");
        Log.d("INCOMING", phoneNumber);
        if ((phoneNumber != null)) {
            telephonyService.endCall();
            Log.d("HANG UP", phoneNumber);
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
}

}

另外,要执行此类操作,我必须在AndroidManifest中声明哪些权限?

注意 - 我已经完成了类似的问题,但是他们似乎都没有调用onReceive(),因此提出了问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

您必须在Android清单文件中注册您的广播接收器。

<receiver android:name=".RejectCall">                     
            <intent-filter>                                                   
                 <action android:name="android.intent.action.PHONE_STATE"/>   
            </intent-filter>
        </receiver>

此外,您必须提供以下许可

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

将上述2段代码放入您的Android清单中应触发拒绝呼叫接收方的onRecieve()