ACTION_DIAL

  • Antworten:5
Jonny Clayton
  • Forum-Beiträge: 13

15.06.2010, 15:17:47 via Website

Hi,

ich kann per Intent.ACTION_DIAL telefonieren.

1public void onClick(View v)
2 {
3 Uri number = Uri.parse("tel:"+222222);
4 Intent dial= new Intent (Intent.ACTION_DIAL, number);
5 startActivity(dial);
6 }

Nach jedem Auflegen springt Android in die Contacts. Aber ich möchte nachdem Auflegen in meine eigene Anwendung zurückspringen. Irgendjemand eine Idee wie man das machen kann ??

— geändert am 15.06.2010, 15:24:09

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

15.06.2010, 18:04:25 via Website

Evtl. mittels startActivityForResult ?

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Gelöschter Account
  • Forum-Beiträge: 94

15.06.2010, 21:45:33 via Website

Da wird doch sicherlich auch ein Intent gesendet. sowas wie HANG_UP oder so. Contactmanager wie aContacts können das ja auch irgendwie. Es wird dann aber immer nachgefragt, welche App bedient werden soll. Außer der User entscheidet, dass immer Deine App genutzt werden soll. Das wird sie dann aber IMHO immer nach jedem Anruf...

ist nicht startActivityForResult() nur für eigene Intents innerhalb der App?

— geändert am 15.06.2010, 21:52:27

Antworten
Jonny Clayton
  • Forum-Beiträge: 13

21.06.2010, 23:12:38 via Website

Hi,

danke erst einmal für die Antworten. Soweit ich das richtig verstanden, kann mittels startActivityForResult() eine SubActivity gestartet werden und nach Beendigung kann mit Hilfe eines Intents das Resultat dieser SubActivity an die MainActivity weitergegeben werden.

Meine Überlegung war, dass es einen Listener geben muss, dass auf Zustandsänderungen beim Telefonieren reagieren muss und dass beim Auflegen mittels eines Intents die Call log aufgerufen wird und die gewählte Nummer und eventuell andere Daten übergeben werden. Also habe ich so etwas versucht, leider ist nachdem Auflegen android wieder in die Call log gesprungen. :(

1public void call( String phonestr){
2 try {
3 Intent callIntent = new Intent(Intent.ACTION_CALL);
4 callIntent.setData(Uri.parse("tel:"+phonestr));
5 startActivity(callIntent);
6 TelephonyManager tManager = (TelephonyManager)
7 getSystemService(Context.TELEPHONY_SERVICE);
8 listener = new ListenToPhoneState();
9 tManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
10 } catch (ActivityNotFoundException activityException) {
11 Log.e("telephony-example", "Call failed", activityException);
12 }
13}
14...
15private class ListenToPhoneState extends PhoneStateListener {
16 public void onCallStateChanged(int state, String incomingNumber) {
17
18 switch (state) {
19 case TelephonyManager.CALL_STATE_IDLE: onRestart(); break;
20 case TelephonyManager.CALL_STATE_OFFHOOK:break;
21 case TelephonyManager.CALL_STATE_RINGING:break;
22 }
23
24
25 }
26 }

Ich bin auf die gleiche Frage in einem anderem Forum begegnet. Die Antwort war dort, dass dieses nicht möglich wäre. Verdammt.

— geändert am 21.06.2010, 23:45:56

Antworten
Jonny Clayton
  • Forum-Beiträge: 13

22.06.2010, 00:15:02 via Website

Hi,

ich habe nun die Klasse gefunden, aus der Call Log aufgerufen wird. Es heisst InCallScreen.java. Ein kleiner Ausschnitt. Der Aufruf erfolgt über die Methode createCallLogIntent() der Klasse PhoneApp.

1if (mIsForegroundActivity) {
2 if (DBG) log("- delayedCleanupAfterDisconnect: finishing...");
3
4 // If this is a call that was initiated by the user, and
5 // we're *not* in emergency mode, finish the call by
6 // taking the user to the Call Log.
7 // Otherwise we simply call finish(), which will take us
8 // back to wherever we came from.
9 if (mShowCallLogAfterDisconnect && !isPhoneStateRestricted()) {
10 if (VDBG) log("- Show Call Log after disconnect...");
11 final Intent intent = PhoneApp.createCallLogIntent();
12 startActivity(intent);
13 // Even in this case we still call finish() (below),
14 // to make sure we don't stay in the activity history.
15 }
16
17 finish();
18 }

Die Methode createCallLogIntent() der Klasse PhoneApp gibt einen Intent zurück und sieht so aus:
1static Intent createCallLogIntent() {
2 Intent intent = new Intent(Intent.ACTION_VIEW, null);
3 intent.setType("vnd.android.cursor.dir/calls");
4 return intent;
5 }

Antworten
Jonny Clayton
  • Forum-Beiträge: 13

23.07.2010, 18:14:10 via Website

Hi,

ich weiss jetzt wie man wie man in die MainActivity zurückspringt, wenn man einen Intent ACTION_DIAL zum Telefonieren aufgerufen hat und nachdem Auflegen wieder zurückspringen möchte. Hier ist der Code.

1public void call(String phonestr) {
2 try {
3 Intent callIntent = new Intent(Intent.ACTION_CALL);
4 callIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
5 callIntent.setData(Uri.parse("tel:" + phonestr));
6 startActivity(callIntent);
7 TelephonyManager tManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
8 ListenToPhoneState listener = new ListenToPhoneState();
9 tManager.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
10 } catch (ActivityNotFoundException activityException) {
11 Log.e(TAG, "Anruf gescheitert", activityException);
12 }
13 }
14......
15......
16private class ListenToPhoneState extends PhoneStateListener {
17
18 public void onCallStateChanged(int state, String incomingNumber) {
19 if (state == TelephonyManager.CALL_STATE_IDLE) {
20 finish();
21 startActivity(new Intent(getBaseContext(), MainActivity.class));
22 } else if (state == TelephonyManager.CALL_STATE_OFFHOOK) {
23 } else if (state == TelephonyManager.CALL_STATE_RINGING) {
24 }
25 }
26
27 }

Antworten