2013-01-02 103 views
4

我可以阻止android中的來電,但它會在時間斷開之前響起幾秒鐘的問題。我怎樣才能直接斷開電話,而沒有單一的振鈴?Android中的來電阻止

我在Manifest文件添加權限:

<uses-permission android:name="android.permission.READ_CONTACTS"/> 
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE"></uses-permission> 
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> 
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission> 
<uses-feature android:name="android.hardware.telephony" /> 

然後創建IDL接口來獲取核心電話服務。

package com.android.internal.telephony; 
    interface ITelephony { 

    boolean endCall(); 

    void answerRingingCall(); 

    void silenceRinger(); 
} 

然後爲來電製作廣播接收器。

public class PhonecallReceiver extends BroadcastReceiver { 

Context context = null; 

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

     Log.i(TAG, "Receving call..."); 
     TelephonyManager telephony = (TelephonyManager) 
     context.getSystemService(Context.TELEPHONY_SERVICE); 
     try { 

      Class c = Class.forName(telephony.getClass().getName()); 
      Method m = c.getDeclaredMethod("getITelephony"); 
      m.setAccessible(true); 
      ITelephony telephonyService = (ITelephony) m.invoke(telephony); 

      Bundle b = intent.getExtras(); 
      String incommingNumber = b.getString(TelephonyManager.EXTRA_INCOMING_NUMBER); 

      telephonyService.endCall(); 

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

回答

3

這是不可能的任務暫時。 查看原因就在這裏:Why it is impossible to intercept incoming calls on Android

不過我建議你還是我自己採取了臨時解決方案:

之前阻止呼叫,你需要做的第一件事就是取回手機的當前模式振鈴,然後打開沉默:

AudioManager audiomanage = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); 
int ringerMode = audiomanage.getRingerMode(); 
audiomanage.setRingerMode(AudioManager.RINGER_MODE_SILENT); 

後阻塞調用(或沒有),讓你的初始模式:

audiomanage.setRingerMode(ringerMode); 

你需要這些權限:

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 
<uses-permission android:name="android.permission.WRITE_SETTINGS"/> 
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/> 

我希望我幫你。