2016-04-15 12 views
0

Ich bin sicher, das hat eine sehr einfache Erklärung, aber es hat mich ratlos. Mit den neuen Aktualisierungen von API 23 müssen Sie Berechtigungen sowohl im Manifest als auch im tatsächlichen Code deklarieren. Der Anforderungscode für das, was ich versuche, erscheint jedoch nicht.ANDROID: Request Code für Berechtigungen nicht angezeigt

Hier ist mein Manifest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.ryanfolz.textscrabble"> 

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

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

Und in meiner ersten Tätigkeit nenne ich diese Methode:

if(ContextCompat.checkSelfPermission(getBaseContext(), "android.permission.READ_SMS") 
     == PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(MainActivity.this, 
      new String[]{"android.permission.READ_SMS"}, REQUEST_CODE_ASK_PERMISSIONS); 
    } 

die "REQUEST_CODE_ASK_PERMISSIONS" verlinkt ist jedoch nicht auf einen numerischen Wert. Tatsächlich gibt es auch keine Anforderungscodes, die in der Autocomplete erscheinen.

Weiß jemand, warum dieser Code nicht erscheint und wie man ihn repariert?

+1

Nun, Sie müssen 'REQUEST_CODE_ASK_PERMISSIONS 'selbst definieren. Das ist Ihr Code, um eine Berechtigungsanfrage von anderen zu unterscheiden, die Sie möglicherweise in dieser Aktivität erstellen. – CommonsWare

Antwort

2

Sie müssen REQUEST_CODE_ASK_PERMISSIONS einen beliebigen Wert zuweisen. Sie sollten mit einem beliebigen numerischen Wert wie

public final int REQUEST_CODE_ASK_PERMISSIONS = 1001;

dieser Wert wird verwendet, zu wissen, welche Berechtigungen erlaubt sind und verwalten in onRequestPermissionsResultREQUEST_CODE_ASK_PERMISSIONS als Konstante deklarieren. Das heißt, Sie fragen Berechtigungen für zwei verschiedene Situationen in derselben Aktivität, und Sie haben nur eine onRequestPermissionsResult Methode. Sie müssen also unterscheiden, welches Ergebnis in onRequestPermissionsResult eingefangen wird.

Also, wenn Sie zwei Wünsche haben, sagen für SMS und für WAKE_LOCK, Sie fordern mit zwei Anforderungscodes, sagen:

public final int REQUEST_CODE_SMS_PERMISSIONS = 1001; 
public final int REQUEST_CODE_WAKELOCK_PERMISSIONS = 1002; 

Damit Sie das Ergebnis in onRequestPermissionsResult wie diese

verwalten
@Override 
    public void onRequestPermissionsResult(final int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { 
     switch(requestCode){ 
      case REQUEST_CODE_SMS_PERMISSIONS: 
       //Code for handling SMS Permission results 
       break; 
      case REQUEST_CODE_WAKELOCK_PERMISSIONS: 
       //Code for handling WAKE_LOCK Permission results 
       break; 
      } 

} 
1

Ich hatte ein ähnliches Problem, und wenn ich um Erlaubnis bitten musste, ich einfach definiert und Integer namens REQUEST_CODE. Wie:

final int REQUEST_CODE = 100; 

Dann rief ich:

ActivityCompat.requestPermissions (MainActivity.this, new String [] { "android.permission.READ_SMS"}, REQUEST_CODE);

Dann onRequestPermission Aufruf, ich handle, wenn Anforderungscode entspricht meine REQUEST_CODE Integer.

Also definieren Sie einfach eine ganze Zahl für eine Erlaubnis.

Vielleicht nicht die genaue Lösung, die Sie suchen, aber es funktioniert.

Verwandte Themen