2013-02-21 10 views
12

Ich möchte eingehende in Android abzulehnen, habe ich so viele Code von diesen Links gesehen.Ablehnen eingehenden Anruf in Android

  1. Android: Taking complete control of phone(kiosk mode), is it possible? How?

  2. How to Reject a call programatically in android

  3. http://androidsourcecode.blogspot.in/2010/10/blocking-incoming-call-android.html

  4. http://androidbridge.blogspot.com/2011/05/how-to-answer-incoming-call-in-android.html?showComment=1361478035090#c5468022990217431781

Aber ich bin nach wie vor nicht in der Lage, es zu tun, kann anyb ody Sag mir in einfachen und einfachen Schritten, wie es geht?

+0

ich abgefangen abgehenden Anruf, aber nicht in der Lage, die Logik hinter eingehenden Anrufen und ihre Interceptions auf diesen Seiten erwähnt zu verstehen. – Zubair

+0

mögliche Duplikate von [Anruf in Android programmgesteuert beenden] (http://stackoverflow.com/questions/18065144/end-call-in-android-programmatically) – Flow

Antwort

1

Sie einen Rundfunkempfänger für das mit einer Intent-Filter mehr brauchen denke ich ACTION_ANSWER

mehr Details über sie hier: http://developer.android.com/reference/android/content/Intent.html#ACTION_ANSWER

Sie es registrieren können die Manifest-Datei oder unter Verwendung des Verfahrens registerReceiver

Weitere Informationen hier: http://developer.android.com/reference/android/content/Context.html#registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter)

Sie müssen auch die entsprechenden Berechtigungen in der Manifestdatei angeben.

<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" /> 

Die von Ihnen angegebenen Links sind ziemlich gut. Du brauchst nur mehr Geduld :)

happy coding.

+0

lol..Ich habe versucht, für 4 bis 5 Tage..dachte Möglicherweise gibt es etwas, das in diesen Links fehlt. – Zubair

+1

Ein weiterer Tipp, wenn Sie möchten, dass die Telefonanrufe nur abgelehnt werden, wenn die App läuft, registrieren Sie den Empfänger programmgesteuert in OnResume Zyklus und Registrierung es onPause Zyklus. Weil ich denke, wenn Sie es im Manifest registrieren, wird es registriert, solange die App nicht in Ihrem System entfernt wird, und es wird Telefonanrufe erfassen oder empfangen, selbst wenn die App nicht läuft. –

+0

Hmm. Das ist ein guter Punkt. Was aber, wenn ich Dienste nutze? Ich sollte es auf destroy() abmelden? – Zubair

14

Um Ihren Anruf abzufangen, müssen Sie nur:
1. Machen Sie ein Paket namens. com.android.internal.telefonie;
2. Erstellen Sie in diesem Paket eine Schnittstellendatei namens ITelefony.
und schreiben Sie diesen Code in diese Schnittstellendatei.

boolean endCall(); 
void answerRingingCall(); 
void silenceRinger(); 

in Ihrer Klasse Jetzt, wo Sie die Verbindung Klasse BroadcastReceiver und in onReceive() Funktion schreiben Sie den folgenden Code erweitern abfangen wollen.

TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); 
    try { 
    Class c = Class.forName(tm.getClass().getName()); 
    Method m = c.getDeclaredMethod("getITelephony"); 
    m.setAccessible(true); 
    telephonyService = (ITelephony) m.invoke(tm); 
    Bundle bundle = intent.getExtras(); 
    String phoneNumber = bundle.getString("incoming_number"); 
    Log.d("INCOMING", phoneNumber); 
    if ((phoneNumber != null)) { 
     telephonyService.endCall(); 
     Log.d("HANG UP", phoneNumber); 
    } 

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

Das ist es.

+0

Arbeitete für mich. Genial !! – Ahmed

+2

bekommen NoSuchMethodException bei Methode m = c.getDeclaredMethod ("getITelephony"); .. Wie man es vermeidet ???? – astuter

+0

@Zubair ist dafür eine Genehmigung erforderlich? –

3

entsprechende Berechtigung Geben Sie und fügen Sie die ITelephony.java Datei

private void declinePhone(Context context) throws Exception { 

     try { 

      String serviceManagerName = "android.os.ServiceManager"; 
      String serviceManagerNativeName = "android.os.ServiceManagerNative"; 
      String telephonyName = "com.android.internal.telephony.ITelephony"; 
      Class<?> telephonyClass; 
      Class<?> telephonyStubClass; 
      Class<?> serviceManagerClass; 
      Class<?> serviceManagerNativeClass; 
      Method telephonyEndCall; 
      Object telephonyObject; 
      Object serviceManagerObject; 
      telephonyClass = Class.forName(telephonyName); 
      telephonyStubClass = telephonyClass.getClasses()[0]; 
      serviceManagerClass = Class.forName(serviceManagerName); 
      serviceManagerNativeClass = Class.forName(serviceManagerNativeName); 
      Method getService = // getDefaults[29]; 
      serviceManagerClass.getMethod("getService", String.class); 
      Method tempInterfaceMethod = serviceManagerNativeClass.getMethod("asInterface", IBinder.class); 
      Binder tmpBinder = new Binder(); 
      tmpBinder.attachInterface(null, "fake"); 
      serviceManagerObject = tempInterfaceMethod.invoke(null, tmpBinder); 
      IBinder retbinder = (IBinder) getService.invoke(serviceManagerObject, "phone"); 
      Method serviceMethod = telephonyStubClass.getMethod("asInterface", IBinder.class); 
      telephonyObject = serviceMethod.invoke(null, retbinder); 
      telephonyEndCall = telephonyClass.getMethod("endCall"); 
      telephonyEndCall.invoke(telephonyObject); 

     } catch (Exception e) { 
      e.printStackTrace(); 
      Log.d("unable", "msg cant dissconect call...."); 

     } 
+0

Ajay es funktioniert nicht :( –

+0

Große Lösungen .. Müssen eine Ergänzung hinzufügen ... Für M + Versionen müssen wir auch Laufzeit Genehmigung für CALL_PHONE nehmen. Prost! – AndroidHacker

+0

Haben Sie die komplette Lösung über selbst gestellte Frage .. http://stackoverflow.com/questions/39527748/programmatisch-disconnect-call-in-android-marshmallow-version – AndroidHacker

0

Eine Schnittstelle in com.android.internal.telephony und Namen wie

interface ITelephony { 
    /** 
    * Demonstrates some basic types that you can use as parameters 
    * and return values in AIDL. 
    */ 
    void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, 
      double aDouble, String aString); 
    boolean endCall(); 
    void silenceRinger();strong text 
    void answerRingingCall(); 
} 

// then catch the incoming call intent and call below method 



    if (intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER) != null) { 
         number = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); 
         Toast.makeText(context, "INCOMING call catched: ", Toast.LENGTH_SHORT).show(); 
disconnectPhoneItelephony(mContext) 
        } 


    private void disconnectPhoneItelephony(Context context) { 
      ITelephony telephonyService; 
      TelephonyManager telephony = (TelephonyManager) 
        context.getSystemService(Context.TELEPHONY_SERVICE); 
      try { 
       Class c = Class.forName(telephony.getClass().getName()); 
       Method m = c.getDeclaredMethod("getITelephony"); 
       m.setAccessible(true); 
       SessionManager.getInstance(context).setBlockStatusAllow("BLOCKED"); 
       telephonyService = (ITelephony) m.invoke(telephony); 
       telephonyService.silenceRinger(); 
       telephonyService.endCall(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 

hinzufügen notwendige Erlaubnis in Manifest

0

Dies ist das beste Tutorial blockieren Sie alle eingehenden Anrufe, die Sie anpassen können, um eingehende Anrufe von nur ausgewählten Nummern zu blockieren.

Android Incoming Call Block

Verwandte Themen