2014-10-02 21 views
0

我已經設法編寫阻止傳入呼叫的​​代碼,但是它在不同的類中,並且我想在用戶在對話框上按下「是」時執行它。我如何調用onReceive()?我作爲參數傳遞了什麼意圖?如何調用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(),因此問題。

謝謝!

回答

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清單應觸發拒絕接聽來電reciever的onRecieve()

+0

謝謝,這回答了我的問題的一部分。但是如果你看到我的MainActivity類,我打開一個對話框,並且我想只在用戶在對話框中按下yes時才阻止呼叫。我會怎麼做?我不知何故需要縫合onRecieve()與用戶按是。 – Slay 2014-10-02 16:04:20

相關問題