2010-04-09 19 views
7

Ich möchte einen Anruf annehmen. Ich habe die Absicht gefunden android.intent.action.ANSWER, aber es scheint, dass der einzige Effekt, den ich erhalte, eine ActivityNotFoundException ist. Warum? Ist es eine veraltete Absicht? Wie kann ich eine Antwort erreichen? Ich habe auch von der "Telnet-Technik" gehört. Was ist das?Wie programmiere ich einen Anruf?

Dank

Antwort

4

es nicht möglich ist, prüfen this Thread für weitere Informationen.

+0

Ok, sah den Thread ... aber warum gibt es diese Absicht? und es ist nicht einmal veraltet! – Matroska

+0

Ich weiß, wenn Sie nach ACTION_ANSWER googlen, würden Sie viele Themen über Leute finden, die verrückt werden, um eine Möglichkeit zu finden, einen Anruf automatisch zu beantworten. Diese Funktion wurde von Android-Mitarbeitern abgesperrt (Sicherheitsgrund?). – systempuntoout

2

dieses Ereignis Dosis nicht funktionieren. sollten Sie verwenden:

Intent i = new Intent(Intent.ACTION_MEDIA_BUTTON); 
KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_HEADSETHOOK); 
i.putExtra(Intent.EXTRA_KEY_EVENT, event); 
context.sendOrderedBroadcast(i, null); 

, die eine bhavior von drücken Sie die Taste emulieren.

+0

Funktioniert es tatsächlich? Ich habe es noch nicht ausprobiert. Hast du? Danke – Matroska

+1

Es funktioniert aber dann ist das Lautsprechertelefon stummgeschaltet. Irgendeine Idee, wie man das verhindert. Ich habe versucht, SetMicrophoneMute (false) in der AudioManager-Klasse, aber kein Ergebnis ?? – Bear

+0

funktioniert nicht immer in Lollipop. Es wurde versucht, es von einem SERVICE zu verwenden, und es funktioniert nicht, wenn es aus dem Status "Bildschirm aus" kommt (wenn der Anruf getätigt wird, während das Telefon inaktiv ist). – leRobot

3

Es ist möglich, einen eingehenden Anruf zu beantworten. Überprüfen Sie dies: here

+1

Das ist tatsächlich mit einem Hack, der möglicherweise in der nächsten Aktualisierung von Android oder nicht funktioniert. –

0

Antwort Absicht sollte an die InCallScreen gesendet werden.

adb shell am start -n com.android.phone/.InCallScreen -a android.intent.action.ANSWER 
6

Sie auch Anruf KeyEvent Anrufe beantworten senden kann, aber das Gerät muss

Antwort wurzeln ruft:

try { 
    Thread.sleep(800); 
    Process process = Runtime.getRuntime().exec(new String[]{ "su","-c","input keyevent 5"}); 
    process.waitFor(); 

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

End Anrufe:

try { 
    Thread.sleep(800); 
    Process process = Runtime.getRuntime().exec(new String[]{ "su","-c","input keyevent 6"}); 
    process.waitFor(); 

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

Eine sehr einfache und einfache Lösung. Für mich gearbeitet. Vielen Dank! – Basher51

+0

Es ist nicht mehr möglich auf Android N. https://source.android.com/security/bulletin/2016-03-01.html – AnixPasBesoin

+0

Schauen Sie sich das Datum an. Es ist seit 5 Jahren :-) – Seifolahi

1

Der Ansatz Das Simulieren eines BT-Mobilteils funktioniert nicht mit allen Android-Versionen und mit einem lle Geräte als BT-Handgeräte können sich unterscheiden.

Der beste Ansatz in vielen Geräten überprüft und Android-Versionen besteht, den Druck und die Freigabe der Ruftaste in dem Dialer bei der Emulation:

Intent buttonDown = new Intent(Intent.ACTION_MEDIA_BUTTON); 
buttonDown.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_DOWN, 
KeyEvent.KEYCODE_CALL)); 
context.sendOrderedBroadcast(buttonDown, "android.permission.CALL_PRIVILEGED"); 

// froyo and beyond trigger on buttonUp instead of buttonDown 
Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON); 
buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(KeyEvent.ACTION_UP, 
KeyEvent.KEYCODE_CALL)); 
context.sendOrderedBroadcast(buttonUp, "android.permission.CALL_PRIVILEGED"); 

Sie können auch tun, dass durch das Senden Shell-Befehl „input KeyEvent 5 "über adb oder über Runtime.exec aber in meinem Fall funktioniert nicht für alle Geräte

2

Dies funktioniert von Android 2.2 bis 4.0 und jetzt nach dem Hinzufügen des try-catch zur letzten Zeile funktioniert es für 4.1.2 und 4.2 Offen gesagt Sprechen weiß nicht, wie es funktioniert, aber es funktioniert für mich.

Log.d(tag, "InSecond Method Ans Call"); 
    // froyo and beyond trigger on buttonUp instead of buttonDown 
    Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON); 
    buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, new KeyEvent(
      KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK)); 
    sendOrderedBroadcast(buttonUp, "android.permission.CALL_PRIVILEGED"); 

    Intent headSetUnPluggedintent = new Intent(Intent.ACTION_HEADSET_PLUG); 
    headSetUnPluggedintent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); 
    headSetUnPluggedintent.putExtra("state", 0); 
    headSetUnPluggedintent.putExtra("name", "Headset"); 
    try { 
     sendOrderedBroadcast(headSetUnPluggedintent, null); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

Dies ist für mich arbeiten in Android 4.1.2 sowie i gibt diese immer noch eine Ausnahme auf 4,2 getestet haben, die behandelt wird.

0
try { 
Runtime.getRuntime().exec("input keyevent"+Integer.toString(KeyEvent.KEYCODE_HEADSETHOOK)); 
} catch (IOException e) { 
    //handle error here 
} 
Verwandte Themen