wake-up-neo.com

Wie tätige ich einen Anruf 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)
297
UMAR

Alles ist gut.

ich habe gerade Anrufberechtigungs-Tag vor Anwendungs-Tag in Manifest-Datei platziert

und jetzt funktioniert alles gut.

70
UMAR

Sie können Intent.ACTION_DIAL Anstelle von Intent.ACTION_CALL Verwenden. Hier wird der Dialer mit der bereits eingegebenen Nummer angezeigt, der Benutzer kann jedoch entscheiden, ob er den Anruf tatsächlich tätigt oder nicht. Für ACTION_DIAL Ist die Berechtigung CALL_PHONE Nicht erforderlich.

362
Ridcully

Diese Demo wird für Sie hilfreich sein ...

Klicken Sie auf die Schaltfläche zum Aufrufen:

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" />
215
Denny Sharma

Elegantere Option:

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

Verwenden Sie die Aktion ACTION_DIAL in Ihrer Absicht. Auf diese Weise benötigen Sie keine Berechtigung. Der Grund, warum Sie die Berechtigung für ACTION_CALL benötigen, besteht darin, dass Sie einen Anruf tätigen, ohne dass der Benutzer etwas unternimmt.

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

WICHTIGE NOTIZ:

Wenn Sie Intent.ACTION_CALL Verwenden, müssen Sie die Berechtigung CALL_PHONE Hinzufügen.

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

IN IHRER AKTIVITÄT:

            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 wichtige Funktion für Ihre App handelt, sollten Sie versuchen, die Berechtigung CALL_PHONE Nicht hinzuzufügen.

ANDERE LÖSUNG:

Soll die Telefon-App mit der auf dem Bildschirm eingegebenen Nummer angezeigt werden, muss der Benutzer nur auf die Anruftaste klicken:

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

Keine Erlaubnis erforderlich

25
MBH

Nur der einfache Oneliner ohne zusätzliche Berechtigungen:

private void dialContactPhone(final String phoneNumber) {
    startActivity(new Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", phoneNumber, null)));
}
22
Artemiy

benutze diesen vollständigen Code

          Intent callIntent = new Intent(Intent.ACTION_DIAL);
          callIntent.setData(Uri.parse("tel:"+Uri.encode(PhoneNum.trim())));
          callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          startActivity(callIntent);     
16
Osama Ibrahim

Erlaubnis beantragen im Manifest

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

Verwenden Sie zum Anrufen diesen Code

Intent in = new Intent(Intent.ACTION_CALL, Uri.parse("tel:99xxxxxxxx"));
try {
    startActivity(in);
} catch (Android.content.ActivityNotFoundException ex) {
    Toast.makeText(mcontext, "Could not find an activity to place the call.", Toast.LENGTH_SHORT).show();
}
11
Abhay Anand

Berechtigungen:

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

Absicht:

Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("tel:0377778888"));
startActivity(callIntent);
8
user3150090

Berechtigung in AndroidManifest.xml

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

Vollständiger Code:

private void onCallBtnClick(){
    if (Build.VERSION.SDK_INT < 23) {
        phoneCall();
    }else {

        if (ActivityCompat.checkSelfPermission(mActivity,
                Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {

            phoneCall();
        }else {
            final String[] PERMISSIONS_STORAGE = {Manifest.permission.CALL_PHONE};
            //Asking request Permissions
            ActivityCompat.requestPermissions(mActivity, PERMISSIONS_STORAGE, 9);
        }
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    boolean permissionGranted = false;
    switch(requestCode){
        case 9:
            permissionGranted = grantResults[0]== PackageManager.PERMISSION_GRANTED;
            break;
    }
    if(permissionGranted){
        phoneCall();
    }else {
        Toast.makeText(mActivity, "You don't assign permission.", Toast.LENGTH_SHORT).show();
    }
}

private void phoneCall(){
    if (ActivityCompat.checkSelfPermission(mActivity,
            Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
        Intent callIntent = new Intent(Intent.ACTION_CALL);
        callIntent.setData(Uri.parse("tel:12345678900"));
        mActivity.startActivity(callIntent);
    }else{
        Toast.makeText(mActivity, "You don't assign permission.", Toast.LENGTH_SHORT).show();
    }
}
6
Atif Mahmood

Um eine Anrufaktivität mit Absichten durchzuführen, sollten Sie die entsprechenden Berechtigungen anfordern.

Hierzu verwenden Sie Berechtigungen in der Datei AndroidManifest.xml.

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

Fügen Sie dann den folgenden Code in Ihre Aktivität ein

if (ActivityCompat.checkSelfPermission(mActivity,
        Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED) {
    //Creating intents for making a call
    Intent callIntent = new Intent(Intent.ACTION_CALL);
    callIntent.setData(Uri.parse("tel:123456789"));
    mActivity.startActivity(callIntent);

}else{
    Toast.makeText(mActivity, "You don't assign permission.", Toast.LENGTH_SHORT).show();
}
5
Codemaker

Sie können dies auch verwenden:

String uri = "tel:" + posted_by.replaceAll("[^0-9|\\+]", "");
5
Áron Pável

Um dies zu vermeiden, können Sie die GUI zum Eingeben von Berechtigungen verwenden. Eclipse kümmert sich darum, wo das Berechtigungs-Tag eingefügt werden soll und ist in den meisten Fällen nicht korrekt

3
SaKet
    final public void Call(View view){

    try {

        EditText editt=(EditText)findViewById(R.id.ed1);
        String str=editt.getText().toString();
        Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:"+str));
        startActivity(intent);
    }
    catch (Android.content.ActivityNotFoundException e){

        Toast.makeText(getApplicationContext(),"App failed",Toast.LENGTH_LONG).show();
    }
1
Deepak Singh

In Android für bestimmte Funktionen müssen Sie die Berechtigung zur Manifest-Datei hinzufügen.

  1. Wechseln Sie zu Projects AndroidManifest.xml
  2. Klicken Sie auf die Registerkarte Berechtigungen
  3. Klicken Sie auf Hinzufügen
  4. Wählen Sie Verwendet die Berechtigung
  5. Siehe den Schnappschuss untenenter image description here

6.Speichern Sie die Manifestdatei und führen Sie dann Ihr Projekt aus. Ihr Projekt sollte jetzt wie erwartet ausgeführt werden.

1
MindBrain
11-25 14:47:01.681: ERROR/AndroidRuntime(302): blah blah...requires Android.permission.CALL_PHONE

^ Die Antwort liegt in der Ausnahmeausgabe "requires Android.permission.CALL_PHONE ":)

 if(ContextCompat.checkSelfPermission(
        mContext,Android.Manifest.permission.CALL_PHONE) != 
              PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions((Activity) mContext, new 
                  String[]{Android.Manifest.permission.CALL_PHONE}, 0);
                } else {
                    startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + "Your Number")));
                }
1
Mohsinali

Für Anruf vom Dialer (keine Erlaubnis erforderlich):

   fun callFromDailer(mContext: Context, number: String) {
        try {
            val callIntent = Intent(Intent.ACTION_DIAL)
            callIntent.data = Uri.parse("tel:$number")
            mContext.startActivity(callIntent)
        } catch (e: Exception) {
            e.printStackTrace()
            Toast.makeText(mContext, "No SIM Found", Toast.LENGTH_LONG).show()
        }
    }

Für direkten Anruf aus der App (Genehmigung erforderlich):

  fun callDirect(mContext: Context, number: String) {
        try {
            val callIntent = Intent(Intent.ACTION_CALL)
            callIntent.data = Uri.parse("tel:$number")
            mContext.startActivity(callIntent)
        } catch (e: SecurityException) {
            Toast.makeText(mContext, "Need call permission", Toast.LENGTH_LONG).show()
        } catch (e: Exception) {
            e.printStackTrace()
            Toast.makeText(mContext, "No SIM Found", Toast.LENGTH_LONG).show()
        }
    }

Erlaubnis:

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