2012-11-12 14 views
9

Sto creando un'app per rifiutare le chiamate da numeri specifici senza nemmeno ottenere un singolo squillo alla persona che effettua la chiamata.Rifiutare una chiamata programmaticamente senza squillo

Ho un codice che rifiuta la chiamata dopo un squillo parziale. Per favore non dire che questa domanda è ripetuta. Ho cercato codice per rifiutare la chiamata senza un anello per molto tempo ancora non ho trovato la soluzione. Gentilmente aiutami!

public void onReceive(Context context, Intent intent) { 
    Bundle b = intent.getExtras(); 
    incommingNumber = b.getString(TelephonyManager.EXTRA_INCOMING_NUMBER); 

    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); 


     for(int i=0;i<blockedNumbers.length;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); 
        telephonyService = (ITelephony) m.invoke(telephony); 
        telephonyService.silenceRinger(); 
        telephonyService.endCall(); 
        } catch (Exception e) { 
        e.printStackTrace(); 
        } 
      } 
     } 

    } 

Questo è il codice che ho utilizzato per rifiutare la chiamata. Ma rifiuta con un anello.

+1

http://stackoverflow.com/questions/7121508/android-taking-complete-control-of-phone-is-it-possible-how/7121586#7121586 –

risposta

4
+2

Questo è esattamente lo stesso codice fornito nella domanda. .. – RvdK

+1

@PoweRoy è necessario creare un file helpl per l'interfaccia .. – Neal

+2

il codice domanda utilizza anche ITelephony. È sospetto che sia lo stesso codice. Per problema non è che la chiamata è rifiutata correttamente, ma che sta suonando 1 volta. – RvdK

0

credo che si deve chiamare:

setResultData(null); 

In questo modo si "uccide" il messaggio che viene trasmesso attraverso tutti i ricevitori.

Se ciò non dovesse essere d'aiuto, si dovrebbe provare a trovare un modo per dare al ricevitore una priorità più alta nel sistema, in modo tale che sia possibile prendere il controllo e impostare i dati dei risultati su null per tutte le successive chiamate del ricevitore.

0

è necessario definire priorità in palese .. ad esempio:

<receiver android:name=".CallReceiver"> 
    <intent-filter android:priority="100"> 
     <action android:name="android.intent.action.PHONE_STATE" /> 
    </intent-filter> 
</receiver> 
0

Utilizzare queste autorizzazioni nel file manifest di Android;

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

La prima autorizzazione "MODIFY_PHONE_STATE" è molto importante, perché questo si occupa la disattivazione squillo del telefono durante la chiamata. Quando qualcuno ti chiama, in quel momento il tuo telefono mostrerà un TIPO DI FLASH del no in arrivo. senza squilli.

Questo lavoro alla mia fine. Dimmi se hai trovato qualche problema.

Problemi correlati