Wie telefoniere ich programmgesteuert?

123

Ich übergebe an eine Aktivität die Nummer, die von einem Bündel angerufen werden soll

und dann habe ich in einer solchen Aktivität eine Taste, um diese Nummer anzurufen. Dies ist der Code:

callButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse(bundle.getString("mobilePhone")));
            }
        }); 

Irgendwas stimmt nicht, denn wenn ich den Knopf drücke, passiert nichts ...

Was mache ich falsch?

PD: Ich verwende ein mit Android 1.5 kompatibles Projekt ... Vielleicht ist ein Anruf mit 1.5 nicht kompatibel?

NullPointerException
quelle
Bitte fügen Sie logcat o / p ein oder erläutern Sie
Ihre

Antworten:

259

Sie haben vergessen, startActivity aufzurufen. Es sollte so aussehen:

Intent intent = new Intent(Intent.ACTION_CALL);

intent.setData(Uri.parse("tel:" + bundle.getString("mobilePhone")));
context.startActivity(intent);

Eine Absicht an sich ist einfach ein Objekt, das etwas beschreibt. Es macht nichts.

Vergessen Sie nicht, Ihrem Manifest die entsprechende Berechtigung hinzuzufügen:

<uses-permission android:name="android.permission.CALL_PHONE" />
Lior
quelle
Hallo @Lior, wie könnte ich das tun, falls das Gerät Dual-Sim hat? Ist es möglich, über eine bestimmte Sim zu telefonieren?
Dinash
3
@ Dinash: Schauen Sie sich diese bereits beantwortete Frage an: stackoverflow.com/questions/13231962/call-from-second-sim
Lior
Ich habe den gleichen Code verwendet, arbeite aber nicht im Galaxy S7 Edge. Dies ist mein Code Intent intentCall = new Intent (Intent.ACTION_CALL); String uri = "tel:" + number.trim (); intentCall.setData (Uri.parse (uri)); if (ActivityCompat.checkSelfPermission (getApplicationContext (), Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {startActivity (intentCall); }
AngelJanniee
Kann dieser Simulator verwendet werden, um Anrufe ohne physisches Gerät zu
tätigen
24

Versuchte dies auf meinem Handy und es funktioniert perfekt.

Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:900..." ));
startActivity(intent);

Fügen Sie diese Berechtigung in die Manifestdatei ein.

<uses-permission android:name="android.permission.CALL_PHONE" />
Anirudh
quelle
1
Zahl ist wie 1689 ,, 3,2,1,1. Ich bekomme ein Problem, es wird nur 1689 sein. Bitte helfen Sie mir, wenn Sie eine Lösung für das gleiche haben.
Teraiya Mayur
@TeraiyaMayur Sie können zuerst alle nicht numerischen Zeichen entfernen. Also , wenn Sie die Telefonnummer haben , wie String number = "1689,,3,2,1,1tunnubmer = "tel:" + number.replaceAll("[^0-9]", "");
Weg
@ Walk, ein Problem ist, dass wir mit speziellen Symbolen wie aufrufen wollen ,*. Sie müssen unter Ziffern liegen. Auf einem Emulator funktioniert es richtig, aber auf einem Gerät werden zusätzliche Symbole und Ziffern gelöscht.
CoolMind
13
 Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+198+","+1+","+1)); 
             startActivity(callIntent);

für mehrfach bestellte Anrufe

Dies wird für DTMF-Aufrufsysteme verwendet. Wenn der Anruf abgebrochen wird, sollten Sie mehr "," zwischen den Nummern übergeben.

Dwivedi Ji
quelle
Dwivedi Ji: Zahl ist wie 1689, 3,2,1,1. Ich bekomme ein Problem, es wird nur 1689 sein. Bitte helfen Sie mir, wenn Sie eine Lösung für das gleiche haben.
Teraiya Mayur
@TeraiyaMayur, es hängt vom IVRS-Anrufsystem ab. Seine Arbeit für mich aufgrund meiner Berufung zum Aussterben wird frühzeitig beantwortet.
Dwivedi Ji
Ja, Sie haben Recht, ich bekomme auch die richtige gültige IVR-Nummer und es funktioniert gut. danke
Teraiya Mayur
6

In der ausgewählten Antwort wird nicht nach Marshmallow-Berechtigungen gesucht. Es funktioniert nicht direkt in Marshmallow 6.0 oder höher.

Ich weiß, dass ich zu spät bin, aber diese Frage hat große Stimmen, deshalb dachte ich, dass sie in Zukunft anderen helfen wird.

In Marshmallow-Geräten benötigen wir eine Laufzeitberechtigung für den Anruf ...

Hier ist ein Beispiel für einen Anruf in Marshmallow oder höher.

So tätigen Sie einen Anruf in Android Marshmallow 6.0 oder höher

Vishal Chhodwani
quelle
2

Hier zeige ich Ihnen, wie Sie von Ihrer Aktivität aus einen Anruf tätigen können. Um einen Anruf zu tätigen, müssen Sie diesen Code in Ihre App eintragen.

try {
    Intent my_callIntent = new Intent(Intent.ACTION_CALL);
    my_callIntent.setData(Uri.parse("tel:"+phn_no));
    //here the word 'tel' is important for making a call...
    startActivity(my_callIntent);
} catch (ActivityNotFoundException e) {
    Toast.makeText(getApplicationContext(), "Error in your phone call"+e.getMessage(), Toast.LENGTH_LONG).show();
}
Pir Fahim Shah
quelle
1
@Astor Ich habe es sehr klar definiert und ich habe bereits Punkte dadurch bekommen, was bedeutet, dass meine Antwort für manche Menschen etwas besser ist als die andere.
Pir Fahim Shah
2

Dies erfordert keine Erlaubnis.

val intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:+123456"))
startActivity(intent)

Oder

val intent = Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", "+123456", null))
startActivity(intent)

Es wird jedoch ein weiterer Dialog angezeigt (in dem Sie gefragt werden, ob Sie das Telefon nur einmal oder immer anrufen möchten). Daher ist es besser, ACTION_CALLmit einer Berechtigung zu verwenden (siehe Widerrufene Berechtigung android.permission.CALL_PHONE ).

CoolMind
quelle
0
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 
   final Button button = (Button) findViewById(R.id.btn_call);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            String mobileNo = "123456789";
            String uri = "tel:" + mobileNo.trim();
            Intent intent = new Intent(Intent.ACTION_CALL);
            intent.setData(Uri.parse(uri));
            startActivity(intent);
        }
    });*
 }
Muhammad Usman Ghani
quelle
0

Wenn jemand in Kotlin sucht

    val  uri = "tel:+800******"
    val call_customer_service = Intent(Intent.ACTION_CALL)
    call_customer_service.setData(Uri.parse(uri))
    startActivity(call_customer_service)

Wie bei einigen anderen Lösungen ist eine android.permission.CALL_PHONEGenehmigung erforderlich .

mughil
quelle