386 Stimmen

Wie tätige ich einen Telefonanruf mit Absicht in Android?

Ich verwende den folgenden Code, um einen Anruf in Android zu tätigen, aber es gibt mir eine Sicherheitsausnahme, bitte helfen Sie.

 posted_by = "111-333-222-4";

 String uri = "tel:" + posted_by.trim() ;
 Intent intent = new Intent(Intent.ACTION_CALL);
 intent.setData(Uri.parse(uri));
 startActivity(intent);

Berechtigungen

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

Ausnahme

11-25 14:47:01.661: ERROR/AndroidRuntime(302): Uncaught handler: thread main exiting due to uncaught exception
11-25 14:47:01.681: ERROR/AndroidRuntime(302): java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:111-333-222-4 cmp=com.android.phone/.OutgoingCallBroadcaster } from ProcessRecord{43d32508 302:com.Finditnear/10026} (pid=302, uid=10026) requires android.permission.CALL_PHONE
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.os.Parcel.readException(Parcel.java:1218)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.os.Parcel.readException(Parcel.java:1206)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1214)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1373)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.app.Activity.startActivityForResult(Activity.java:2749)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.app.Activity.startActivity(Activity.java:2855)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at com.Finditnear.PostDetail$2$1$1$1.onClick(PostDetail.java:604)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:884)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.widget.AdapterView.performItemClick(AdapterView.java:284)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.widget.ListView.performItemClick(ListView.java:3285)
11-25 14:47:01.681: ERROR/AndroidRuntime(302):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:1640)

420voto

Ridcully Punkte 23073

Sie können verwenden Intent.ACTION_DIAL 代わりに Intent.ACTION_CALL . Dadurch wird das Wählgerät mit der bereits eingegebenen Nummer angezeigt, aber der Benutzer kann entscheiden, ob er den Anruf tatsächlich tätigen möchte oder nicht. ACTION_DIAL erfordert nicht die CALL_PHONE Erlaubnis.

268voto

Denny Sharma Punkte 2965

Diese Demo ist hilfreich für Sie...

Bei Klick auf die Ruftaste:

Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "Your Phone_number"));
startActivity(intent);

Erlaubnis im Manifest:

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

EDIT IN 2021

Sie sollten es in Ihre Manifestdatei schreiben, aber gleichzeitig sollten Sie zur Laufzeit fragen, wie dieser Code:

if (ContextCompat.checkSelfPermission(this,android.Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.CALL_PHONE),
                REQUEST_CODE)

        } else {

// else block means user has already accepted.And make your phone call here.

}

Und wenn Sie möchten, können Sie onRequestPermissionsResult überschreiben, um dem Benutzer eine bessere Erfahrung zu bieten, wenn Sie den gleichen Code mit else-Block schreiben, muss der Benutzer nicht erneut auf die Schaltfläche klicken, nachdem Sie die Erlaubnis erteilt haben, sondern wird direkt aufgerufen.

230voto

cprcrack Punkte 15337

Eine elegantere Variante:

String phone = "+34666777888";
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", phone, null));
startActivity(intent);

109voto

wheeliez Punkte 1528

Verwenden Sie die Aktion ACTION_DIAL in Ihrer Absicht, dann brauchen Sie keine Erlaubnis. Der Grund, warum Sie die Erlaubnis mit ACTION_CALL benötigen, ist, dass Sie einen Telefonanruf ohne eine Aktion des Benutzers tätigen wollen.

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:0987654321"));
startActivity(intent);

39voto

MBH Punkte 15647

WICHTIGER HINWEIS:

Wenn Sie Intent.ACTION_CALL müssen Sie hinzufügen CALL_PHONE Erlaubnis.

Das ist nur dann in Ordnung, wenn Sie nicht wollen, dass Ihre App in Google Play für Tablets angezeigt wird, die keine SIM-Karte oder kein GSM haben.

IN IHRER TÄTIGKEIT:

            Intent callIntent = new Intent(Intent.ACTION_CALL);
            callIntent.setData(Uri.parse("tel:" + Constants.CALL_CENTER_NUMBER));
            startActivity(callIntent);

MANIFEST:

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

Wenn es sich also nicht um eine kritische Funktion für Ihre Anwendung handelt, sollten Sie auf das Hinzufügen von CALL_PHONE Erlaubnis.

ANDERE LÖSUNG:

Es soll die Telefon-App mit der Nummer auf dem Bildschirm angezeigt werden, so dass der Benutzer nur auf die Schaltfläche "Anrufen" klicken muss:

            Intent dialIntent = new Intent(Intent.ACTION_DIAL);
            dialIntent.setData(Uri.parse("tel:" + Constants.CALL_CENTER_NUMBER));
            startActivity(dialIntent);

Hierfür ist keine Genehmigung erforderlich.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X