2016-05-25 7 views
1

Ich verwende diesen einfachen Code, um einige Daten des Telefongeräts zu retrieven, aber aus irgendeinem Grund, wenn ich die App auf dem Emulator öffne, erscheint eine Nachricht mit der Nachricht "Unfortunately *APP NAME* has closed" und dann wird die App heruntergefahren.Android TelephonyManager funktioniert nicht mit Android Studio-Simulator?

Dies ist der Code ich verwende:

TelephonyManager tm=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
String IMEINumber=tm.getDeviceId(); 

ich diesen Code schrieb nur die Telephonymanager Methoden zu testen, aber nichts funktioniert ausgenommen: "getPhoneType();"

irgendwelche Ideen, was das Problem ist? vielleicht liegt es daran, dass ich es auf meinem Android Studio Emulator laufen lasse?

das Problem heißt es: getDeviceId: Neither user 10058 nor current process has android.permission.READ_PHONE_STATE obwohl ich eine Erlaubnis im Manifest hinzugefügt:

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

(über dem Anwendungsteil)

danken Ihnen für Ihre Hilfe

+0

Sie sollten vielleicht auf den Fehler suchen, anstatt was falsch zu raten. – JoxTraex

+0

@JoxTraex du bist mehr dann richtig. Das Problem lautet: 'getDeviceId: Weder der Benutzer 10058 noch der aktuelle Prozess hat android.permission.READ_PHONE_STATE' obwohl ich eine Berechtigung im Manifest hinzugefügt habe –

+0

hast du deine App entfernt und neu installiert? Stellen Sie außerdem sicher, dass Sie die Berechtigung richtig geschrieben haben. – JoxTraex

Antwort

3

Sind Sie mit Android M? Wenn dies der Fall ist, liegt das daran, dass es nicht ausreicht, permissions im manifest zu deklarieren. Für einige permissions, müssen Sie explizit Benutzer fragen, in der run-time:

prüfen diese Link für Run time Permission.

Codeschnipsel.

diese definieren Globally in Ihrem Activity.

private static final int PERMISSION_REQUEST_CODE = 1; 

Sie dieses Zeug in onCreate.

// Here, thisActivity is the current activity 
if (ContextCompat.checkSelfPermission(TestingActivity.this, 
     Manifest.permission.READ_PHONE_STATE) 
     != PackageManager.PERMISSION_GRANTED) { 

    // Should we show an explanation? 
    if (ActivityCompat.shouldShowRequestPermissionRationale(TestingActivity.this, 
      Manifest.permission.READ_PHONE_STATE)) { 

     // Show an expanation to the user *asynchronously* -- don't block 
     // this thread waiting for the user's response! After the user 
     // sees the explanation, try again to request the permission. 

    } else { 

     // No explanation needed, we can request the permission. 

     ActivityCompat.requestPermissions(TestingActivity.this, 
       new String[]{Manifest.permission.READ_PHONE_STATE}, 
       PERMISSION_REQUEST_CODE); 

     // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an 
     // app-defined int constant. The callback method gets the 
     // result of the request. 
    } 
} 

Schließlich overrride onRequestPermissionsResult.

@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case PERMISSION_REQUEST_CODE: { 
      // If request is cancelled, the result arrays are empty. 
      if (grantResults.length > 0 
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 

       // permission was granted, yay! 

      } else { 

       // permission denied, boo! Disable the 
       // functionality that depends on this permission. 
      } 
      return; 
     } 

     // other 'case' lines to check for other 
     // permissions this app might request 
    } 
} 
+0

Vielen Dank Ich denke, das ist das Problem, obwohl ich Probleme habe, ihre Beispiele zu verstehen. Wenn Sie mit einem Code-Snippet helfen können, wäre das das Beste. –

+0

@danijinji Überprüfen Sie meine bearbeitete Antwort auf Codeausschnitt danke :). –

Verwandte Themen