2011-09-08 47 views
5

Trong ứng dụng của tôi, tôi sẽ duy trì một danh sách liên hệ.Cách từ chối cuộc gọi có lập trình trong android

Mọi cuộc gọi từ danh bạ trong danh sách sẽ bị xóa. Chúng sẽ hiển thị dưới các cuộc gọi nhỡ nhưng điện thoại sẽ không đổ chuông.

+0

ContentObserver là từ nơi bạn có thể thực hành tốt nhất –

+0

thể trùng lặp của [Cách chặn cuộc gọi trong android] (http://stackoverflow.com/questions/1083527/how-to-block-calls-in-android) –

+0

'MODIFY_PHONE_STATE' [quyền chỉ dành cho các ứng dụng hệ thống] (http://stackoverflow.com/questions/4715250/how-to-grant-modify-phone-state-permission-for-apps-ran-on-gingerbread) (dành cho Android 2.3 trở lên). Nếu bạn chỉ muốn sử dụng ứng dụng cho điện thoại mà bạn có quyền truy cập, bạn có thể [tạo ứng dụng hệ thống ứng dụng của mình] (http://projectmaxs.org/documentation/systemapp.html) – tchelidze

Trả lời

15

Đầu tiên tạo ra giao diện này:

public interface ITelephony { 

     boolean endCall(); 

     void answerRingingCall(); 

     void silenceRinger(); 

    } 

Sau đó Tạo lớp này mà kéo dài 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(); 
     } 
} 

này sẽ chỉ chặn phonenumber duy nhất, nhưng bạn sẽ có được điểm.

Trong add biểu hiện của bạn này:

<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

hi tôi đã làm điều đó. Nhưng chuyện xảy ra. Làm thế nào để tạo ra giao diện đó những gì tôi có nghĩa là giao diện bình thường hoặc file aidl – harish

+0

chỉ cần tạo ra một intercafe bình thường. Nhưng bạn có thể cần phải đặt nó trong một gói được gọi là: com.android.internal.telephony thử điều đó. –

+0

thậm chí nó không hoạt động tôi nghĩ rằng chúng ta phải tạo tập tin aidl. Nhưng không biết làm thế nào để làm điều đó. – harish

2

Tải về lớp của ITelephony từ here.

Sau đó đặt nó trong một gói (làm cho một gói mới) của com.android.internal.telephony. Sau đó, nhập khẩu các gói đến lớp phù hợp và để từ chối một cuộc gọi sử dụng phương pháp endCall()

Các vấn đề liên quan