5
Context context; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Context context = (Permission) this; 
    // In an actual app, you'd want to request a permission when the user 
    // performs an action 
    // that requires that permission. 
    if (Build.VERSION.SDK_INT >= 23) { 
     getPermissionToReadUserContacts(); 
    } 
} 

// Identifier for the permission request 
private static final int READ_CONTACTS_PERMISSIONS_REQUEST = 1; 

// Called when the user is performing an action which requires the app to 
// read the 
// user's contacts 
public void getPermissionToReadUserContacts() { 
    // 1) Use the support library version 
    // ContextCompat.checkSelfPermission(...) to avoid 
    // checking the build version since Context.checkSelfPermission(...) is 
    // only available 
    // in Marshmallow 
    // 2) Always check for permission (even if permission has already been 
    // granted) 
    // since the user can revoke permissions at any time through Settings 
    if (ContextCompat.checkSelfPermission(this, 
      Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) { 

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

      // 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(this, 
        new String[] { Manifest.permission.READ_CONTACTS }, 
        READ_CONTACTS_PERMISSIONS_REQUEST); 

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

@Override 
public void onRequestPermissionsResult(int requestCode, 
     String permissions[], int[] grantResults) { 
    switch (requestCode) { 
    case READ_CONTACTS_PERMISSIONS_REQUEST: { 
     // If request is cancelled, the result arrays are empty. 
     if (grantResults.length > 0 
       && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
      Toast.makeText(this, "Read Contacts permission granted", 
        Toast.LENGTH_SHORT).show(); 
      // permission was granted, yay! Do the 
      // contacts-related task you need to do. 

     } else { 
      Toast.makeText(this, "Read Contacts permission denied", 
        Toast.LENGTH_SHORT).show(); 
      // permission denied, boo! Disable the 
      // functionality that depends on this permission. 
     } 
     return; 
    } 

    // other 'case' lines to check for other 
    // permissions this app might request 
    } 
} 
// Callback with the request from calling requestPermissions(...) 
/* 
* @Override public void onRequestPermissionsResult(int requestCode, String 
* permissions[], int[] grantResults) { // Make sure it's our original 
* READ_CONTACTS request if (requestCode == 
* READ_CONTACTS_PERMISSIONS_REQUEST) { if (grantResults.length == 1 && 
* grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
* Toast.makeText(this, "Read Contacts permission granted", 
* Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, 
* "Read Contacts permission denied", Toast.LENGTH_SHORT).show(); } } else { 
* super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
* } } 
*/ 

Wenn ich versuche, dies in einer Demo-Anwendung es fine.But arbeitet, wenn ich in dem Projekt sind es ein Fehler als title.Any Hilfe wirft wird geschätzt werden. Es ist aufgrund des Kontextes ich denke so. ................................................. .................................................. .................................................. .................................................. .................................................. .................................................. ...............................................Verfahren checkSelfPermission (Context, String) ist für den Typ undefined ContextCompat

+2

Verwendung der Kompilierung ‚com.android.support:appcompat-v7:23.0.1‘ –

Antwort

2

ContextCompat.checkSelfPermission() erfordert Support-Bibliothek in Version 23 oder höher.

in dependencies Block hinzufügen in niedrigerer Ebene build.gradle:

compile 'com.android.support:appcompat-v7:23.1.1' 

Wenn Sie vorherige Version hier haben (die Sie wahrscheinlich haben), sollten Sie Spur ersetzen mit von mir zur Verfügung gestellt.

+3

Wie löse ich das mit Eclipse, wo es keine gradle Dateien bauen? Ich habe die V7-Version von appcompat vom Android SDK Manager heruntergeladen? Ich habe die Android-support-v7-appcompat.jar zu meinem Projekt hinzugefügt. Der Eclipse-IDE-Fehler, den ich bekomme, ist "Die Methode checkSelfPermission (MyActivity, String) ist nicht definiert durch den Typ ContextCompat In meinen Importen: importieren android.support.v7.app. * Importieren android.support.v7.appcompat. * Android importieren. support.v4.content.ContextCompat – neuman8

+4

Ich habe mein eigenes Problem gelöst, ich habe auch die neue Version von android-support-v4.jar nicht importiert.Google hat viele Änderungen an diesem .jar vorgenommen, seit ich das letzte Mal in meine project – neuman8

+0

können Sie mir Jar Link zur Verfügung stellen, so kann ich Laufzeitpermission mit Eclipse integrieren? – Vasant

0

Dieses Problem tritt auf, weil die Supportbibliothek veraltet ist.

Wenn Sie Eclipse-verwenden, habe ich die einfachste Lösung ist, mit der rechten Maustaste auf das Projekt und gehen Sie zu finden:

Android Tools > Add support library...

Wenn das Problem dadurch nicht behoben wird, haben Sie wahrscheinlich muß das SDK aktualisieren zuerst:

Window > Android SDK Manager > Install Updates

die Support-Bibliothek wird hinzugefügt/aktualisiert und zeigt nicht mehr diesen Fehler.

Verwandte Themen