2016-12-27 1 views
3

Ich möchte nur Telefonanrufe von meiner Anwendung durchführen.Ich versuchte alles andere.Android-Telefonanruf funktioniert nicht

ich müde alle Lösungen aus dem Internet einschließlich mkyong, tutorialspoint und vieles mehr.

phoneCalls.setOnClickListener(new View.OnClickListener() { 
         public void onClick(View arg0) { 
          Intent callIntent = new Intent(Intent.ACTION_CALL); 
          callIntent.setData(Uri.parse("tel:0377778888")); 

          if (ActivityCompat.checkSelfPermission(getActivity(), 
            Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { 
           return; 
          } 
          startActivity(callIntent); 
         } 
        }); 

und in meinem Manifest fragte ich die Erlaubnis als:

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

Der obige Code doesnot einen Fehler zeigt, wie well.I wieder versucht das ein

button.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 

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

      } 

     }); 

    } 

Auf diesen Code es versuchen zeigt folgenden Fehler bei logcat:

java.lang.SecurityException: Permission Denial: starting Intent { act=android.intent.action.CALL dat=tel:xxxxxxxxxx cmp=com.android.server.telecom/.components.UserCallActivity } from ProcessRecord{80f03c 26994:com.example.user.home/u0a73} (pid=26994, uid=10073) with revoked permission android.permission.CALL_PHONE 
                      at android.os.Parcel.readException(Parcel.java:1620) 
                      at android.os.Parcel.readException(Parcel.java:1573) 
                      at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2680) 
                      at android.app.Instrumentation.execStartActivity(Instrumentation.java:1509) 
                      at android.app.Activity.startActivityForResult(Activity.java:3930) 
                      at android.app.Activity.startActivityForResult(Activity.java:3890) 
                      at android.app.Activity.startActivity(Activity.java:4213) 
                      at android.app.Activity.startActivity(Activity.java:4181) 
                      at com.example.user.home.Main3Activity$1.onClick(Main3Activity.java:30) 
                      at android.view.View.performClick(View.java:5204) 
                      at android.view.View$PerformClick.run(View.java:21158) 
                      at android.os.Handler.handleCallback(Handler.java:739) 
                      at android.os.Handler.dispatchMessage(Handler.java:95) 
                      at android.os.Looper.loop(Looper.java:148) 
                      at android.app.ActivityThread.main(ActivityThread.java:5461) 
                      at java.lang.reflect.Method.invoke(Native Method) 
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

Mit Hoffnung lasse ich diese Frage hier. Jemand bitte helfen

+0

, auf dem OS Sie versuchen? – Nas

+0

api 23 android Marshmallow –

+0

haben Sie Laufzeitberechtigungsanforderung von Benutzer – Nas

Antwort

3

Weil Sie es auf Marshmallow 6.0 versuchen und Sie keine Runtime-Berechtigung für Marshmallow oder über Android-Version festgelegt haben.

Ihr Code wird unter 6.0 ausgeführt, aber nicht in 6.0 oder höher.

Replcae Code durch diese.

button.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) 
     { 
      callPhoneNumber(); 
     } 
    }); 
} 

Erstellen Sie diese Call-Methode mit Berechtigungsprüfung

public void callPhoneNumber() 
{ 
    try 
    { 
     if(Build.VERSION.SDK_INT > 22) 
     { 
      if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) { 
       // TODO: Consider calling 

       ActivityCompat.requestPermissions(TestActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 101); 

       return; 
      } 

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

     } 
     else { 
      Intent callIntent = new Intent(Intent.ACTION_CALL); 
      callIntent.setData(Uri.parse("tel:" + "0377778888")); 
      startActivity(callIntent); 
     } 
    } 
    catch (Exception ex) 
    { 
     ex.printStackTrace(); 
    } 
} 

Wenn Benutzer die Erlaubnis der Kontrolle gewährt kommt hier

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, 
              int[] grantResults) 
{ 
    if(requestCode == 101) 
    { 
     if(grantResults[0] == PackageManager.PERMISSION_GRANTED) 
     { 
      callPhoneNumber(); 
     } 
     else 
     { 
      Log.e(TAG, "Permission not Granted"); 
     } 
    } 
} 
+1

Vielen Dank. Dies ist die absolute und umfassende Lösung. –

+0

Vergnügen ist alles meins :) –

Verwandte Themen