2011-09-08 26 views
5

W mojej aplikacji utrzymam listę kontaktów.Jak odrzucić połączenie programowo w Androidzie

Wszelkie połączenia od kontaktów z listy zostaną usunięte. Będą wyświetlane pod nieodebranymi połączeniami, ale telefon nie zadzwoni.

+0

ContentObserver jest słowo gdzie najlepiej praktyka –

+0

możliwe duplikat [Jak blokować połączenia w Androidzie] (http://stackoverflow.com/questions/1083527/how-to-block-calls-in-android) –

+0

'MODIFY_PHONE_STATE' [uprawnienie dotyczy tylko aplikacji systemowych] (http://stackoverflow.com/questions/4715250/how-to-grant-modify-phone-state-permission-for-apps-ran-on-pingerbread) (dla Androida 2.3 i nowszych). Jeśli chcesz używać aplikacji tylko dla telefonu, do którego masz dostęp, możesz [utworzyć aplikację systemową aplikacji] (http://projectmaxs.org/documentation/systemapp.html) – tchelidze

Odpowiedz

15

pierwsze stworzenia tego interfejsu:

public interface ITelephony { 

     boolean endCall(); 

     void answerRingingCall(); 

     void silenceRinger(); 

    } 

następnie utworzyć tej klasy, która rozciąga 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(); 
     } 
} 

Spowoduje to zablokowanie tylko tej jednej phonenumber, ale masz rację.

W swoim oczywistym dodać to:

<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

. Ale stało się coś ciekawego. Jak stworzyć ten interfejs, co mam na myśli normalny interfejs lub plik pomocy – harish

+0

wystarczy utworzyć normalny intercafe. Ale może być konieczne umieszczenie go w pakiecie o nazwie: com.android.internal.telephony spróbuj tego. –

+0

nawet jeśli nie działa, myślę, że musimy wygenerować plik pomocy. Ale nie wiem, jak to zrobić. – harish

2

Ściągnij klasę ITelephony z here.

następnie umieścić go w opakowaniu (marka nowy pakiet) z com.android.internal.telephony. następnie zaimportować pakiet do odpowiedniej klasy i odrzucanie połączenia użyć metody endCall()