2013-06-28 30 views
2

在我的應用程序中,我想阻止具體的來電號碼。我做谷歌,並遵循Blocking Incoming call - Android。但這段代碼不適用於我。我正在測試android 2.3.5如何拒絕/關閉特定的來電號碼

這裏我沒有活動類。 >>第一類是擴展BroadcastReceiver。

的manifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.blocknumber" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="17" /> 

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

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <receiver android:name=".MainActivity" > 
     <intent-filter> 
      <action android:name="android.intent.action.PHONE_STATE" /> 
     </intent-filter> 
    </receiver> 
</application> 

MainActivity.class

public class MainActivity extends BroadcastReceiver { 

public void onReceive(Context context, Intent intent) { 
    String blockedNumbers[] = { "xxxxxxxxxx", "xxxxxxxxxx" }; 
    Bundle b = intent.getExtras(); 
    /* 
    * String incommingNumber = b 
    * .getString(TelephonyManager.EXTRA_INCOMING_NUMBER); 
    */ 
    String incommingNumber = b.getString("incoming_number"); 
    Log.e("Incomming number========>", incommingNumber); 
    // String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 

    for (int i = 0; i < blockedNumbers.length; i++) { 
     Log.e("Incomming >>>>>>>>>>>>>========>", "" + i); 
     if (incommingNumber.equalsIgnoreCase(blockedNumbers[i])) { 
      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); 
       // telephonyService.silenceRinger(); 
       telephonyService.endCall(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

} 
} 

ITelephony

public interface ITelephony { 

    boolean endCall(); 

    void answerRingingCall(); 

    //void silenceRinger(); 

} 
+0

你的代表建議你已經在這附近超過了足夠長的時間,以便知道你的問題是不完整的,並且只是要求讀者在不知道他們正在尋找什麼問題的情況下檢查你的代碼(「它不起作用」不是足夠)強烈地皺起了眉頭。 – mah

回答

1

最後,解決問題, 創建IDL接口來獲取核心電話服務 包的名稱必須是com.android.internal.telephony

文件名:ITelephony.aidl //首先在這裏我createing ITelephony.java

對於創建.aidl文件New > File和寫入ITelephony.aidl

,並按照步驟Blocking a call without user intervention in android with an example.

+0

您在這裏歡迎:-http://chat.stackoverflow.com/rooms/46908/walkinglion –