2011-09-08 115 views
5

在我的應用程序中,我將維護一個聯繫人列表。如何在android中以編程方式拒絕呼叫

來自列表中聯繫人的任何呼叫都將被刪除。他們會在未接來電時顯示,但手機不會響。

+0

ContentObserver是單詞的時候你最能實踐 –

+0

可能重複[如何在android中阻止調用](http://stackoverflow.com/questions/1083527/how-to-block-calls-in-android) –

+0

'MODIFY_PHONE_STATE' [權限僅限於系統應用](http:///stackoverflow.com/questions/4715250/how-to-grant-modify-phone-state-permission-for-apps-ran-on-gingerbread)(適用於android 2.3及以上版本)。如果你想只用於你有權訪問的手機,你可以[製作你的應用系統應用](http://projectmaxs.org/documentation/systemapp.html) – tchelidze

回答

15

首先創建這個接口:

public interface ITelephony { 

     boolean endCall(); 

     void answerRingingCall(); 

     void silenceRinger(); 

    } 

然後建立這個類,它擴展了BroadcastReceiver

public class IncomingCallReceiver extends BroadcastReceiver { 
    private ITelephony telephonyService; 
    private String blacklistednumber = "+458664455"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 

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

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

這隻會阻止單個PHONENUMBER,但你明白了吧。

在您的清單補充一點:

<receiver android:name=".IncomingCallReceiver"> 
    <intent-filter android:priority="999"> 
     <action android:name="android.intent.action.PHONE_STATE" /> 
    </intent-filter> 
</receiver> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" /> 
<uses-permission android:name="android.permission.CALL_PHONE" /> 
<uses-permission android:name="android.permission.PROCESS_INCOMING_CALLS" /> 
+0

嗨,我做到了。但是發生了點擊。如何創建接口我的意思是正常的接口或aidl文件 – harish

+0

只是創建一個正常的intercafe。但是你可能需要把它放在名爲com.android.internal.telephony的包中。 –

+0

即使它不工作,我認爲我們必須生成aidl文件。但不知道該怎麼做。 – harish

2

here下載類ITelephony的。

然後把它放在一個包裝(使一個新的封裝)的com.android.internal.telephony. 然後包導入到合適的類和拒絕呼叫使用endCall()方法

相關問題