2010-05-06 3 views
9

Ich versuche, meine eigene Telefonanruf-Benutzeroberfläche zu implementieren.Wie Sie einen eingehenden Anruf annehmen, indem Sie auf eine Schaltfläche klicken?

Ich möchte, wenn ein Anruf eingeht, die eingehende Telefonnummer und ein Bild angezeigt werden, und wenn ich einen Knopf drücke, wird der eingehende Anruf angenommen/beantwortet.

Der entsprechende Code ist:

@Override 
    public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    answerButton = (Button) findViewById(R.id.pickup); 
    answerButton.setOnClickListener(new OnClickListener() { 
     public void onClick(final View v) { 
      Intent intent = new Intent("android.intent.action.ANSWER"); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(intent);   
     } 
    }); 

Leider funktioniert der Code nicht. Zunächst wird eine Ausnahme ausgelöst, wenn ich meine Antwort-Taste drücken:

ActivityNotFoundException: Keine Aktivität Intent zu handhaben gefunden {
act = android.intent.action.ANSWER

Dann habe ich eine Eintrag im AndroidManifest.xml:

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

Ich führe die App wieder, es gibt keine Ausnahme mehr. Ich bezweifle jedoch, dass der eingehende Anruf nicht wirklich akzeptiert wird. Denn wenn die Android-Bildschirmannahmetaste (grüne Taste) gedrückt wird, wird der eingehende Anruf angenommen und ein grünes Anrufsymbol wird auch in der oberen linken Ecke des Emulatorbildschirms angezeigt, während dies bei meiner App nicht der Fall ist.

Ich lese auch den Quellcode der Phone App in Android-Quelle. In der Phone-Klasse gibt es Methoden wie acceptCall(). Aber diese Codes scheinen schwierig für mich zu gebrauchen, weil es viele Import Erklärung im Code ist, wie zum Beispiel:

import com.android.internal.telephony.Call; 
import com.android.internal.telephony.CallStateException; 
import com.android.internal.telephony.CallerInfo; 
import com.android.internal.telephony.CallerInfoAsyncQuery; 
import com.android.internal.telephony.Connection; 
import com.android.internal.telephony.MmiCode; 
import com.android.internal.telephony.Phone; 

Und wenn ich diese Importe in meinem Code hinzufügen, wird es auch sein, viele Fehler, wie zum Beispiel :
The import com.android.internal.telephony cannot be resolved.

Was ist der richtige und einfache Weg für mein Problem?

+0

siehe Link: [http://mylifewithandroid.blogspot.com/2008/01/phonecalls.html](http://mylifewithandroid.blogspot. com/2008/01/Telefonanrufe.html) –

Antwort

1

In der Kategorie "android.intent.category.DEFAULT" (Intent.CATEGORY_DEFAULT)

+0

Vielen Dank, MasterGaurav! Aber ich habe bereits die Kategorie "android.intent.category.DEFAULT" in der Manifest-Datei hinzugefügt. Hier ist der Code: \t \t \t So frage ich mich, es andere Gründe gibt . – Armstrong

+0

Ich wollte Standard-Code in die Absicht im Code hinzufügen. –

1

Die Absicht android.intent.action.ANSWER funktioniert irgendwie nicht wie erwartet. Es gibt eine Problemumgehung, indem Sie die Bluetooth-Schaltfläche emulieren, um den eingehenden Anruf zu beantworten. Sie können ein Beispiel von auto-answer Projekt sehen.

0

Sie müssen einen Broadcast-Empfänger erstellen, in dem Sie das Ereignis erhalten, wenn Ihr Telefon klingelt, und danach können Sie die gewünschte Aktivität starten. Sie können den Standardbildschirm für eingehende Anrufe nicht durch Verwendung von CUSTOM ROM ersetzen. Und vergessen Sie nicht, die Priorität in Broadcast-Empfänger in Manifest-Datei zu setzen. Sobald Sie das Ereignis erhalten, können Sie das Objekt von ITelefony mithilfe von reflection.And verwenden, die Ihnen Methoden zum Beantworten oder Ablehnen des Anrufs bietet.

0

Dies ist möglich mit dem com.android.internal.telephony-Paket, aber Sie müssen irgendwie für die Verwendung dieser Methoden in Eclipse finden und Ihre App muss als eine System-App mit dem Android-Quellcode kompiliert werden. durch diese

0

Ihre Call-Methode akzeptieren ändern:

public static void acceptCall(Context context) 
{ 
    Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON); 
    buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, 
     new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK)); 
    context.sendOrderedBroadcast(buttonUp, "android.permission.CALL_PRIVILEGED"); 
} 
Verwandte Themen