2017-02-23 4 views
2

Ich habe vor kurzem einen Absturz, während ich meine App in Samsung Handy mit Android Nougat. Ich habe nicht die Laufzeit Erlaubnis für com.sec.android.provider.badge.BadgeProvider geben und das macht den Absturz. Ich weiß nicht, wie ich die Runtime-Erlaubnis für diesen Badge-Anbieter erteilen darf, wenn jemand weiß, bitte helft mir.Permission Denial: Schreiben com.sec.android.provider.badge.BadgeProvider

Der Crash-Bericht gibt unter

java.lang.SecurityException: Permission Denial: Schreiben com.sec.android.provider.badge.BadgeProvider uri Inhalt: //com.sec.badge/apps von pid = 5325 , uid = 10242 erfordert com.sec.android.provider.badge.permission.WRITE oder grantUriPermission() bei android.os.Parcel.readException (Parcel.java:1693) bei android.database.DatabaseUtils.readExceptionFromParcel (DatabaseUtils .java: 183) bei android.database.DatabaseUtils.readExceptionFromParcel (DatabaseUtils.java:135) bei android.content.ContentProviderProxy.delete (ContentProviderNative.java:544)

Antwort

0

Dies ist die Vorlage, die ich verwendet habe, um mehrere Berechtigungen zur Laufzeit anzufordern. Sie müssen nach Ihren eigenen Anforderungen ändern

Sie müssen auch in Ihrem Manifest und <uses-permission android:name="com.sec.android.provider.badge.permission.WRITE"/> enthalten.

public class SplashScreen extends AppCompatActivity { 

private static final int PLAY_SERVICES_RESOLUTION_REQUEST = 9000; 
private static final int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 124; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_splash_screen); 

} 

@Override 
protected void onPostCreate(Bundle savedInstanceState) { 
    super.onPostCreate(savedInstanceState); 
} 

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 
     if (hasFocus) { 
      getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE 
        | View.SYSTEM_UI_FLAG_FULLSCREEN 
        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); 
     } 
    } 
} 

private boolean checkPlayServices() { 
    GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance(); 
    int resultCode = apiAvailability.isGooglePlayServicesAvailable(this); 
    if (resultCode != ConnectionResult.SUCCESS) { 
     if (apiAvailability.isUserResolvableError(resultCode)) { 
      apiAvailability.getErrorDialog(this, resultCode, PLAY_SERVICES_RESOLUTION_REQUEST) 
        .show(); 
     } else { 
      Log.i("Google Play", "This device is not supported."); 
     } 
     return false; 
    } 
    return true; 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP_MR1) { 
      // Marshmallow+ 
      askMultipleRuntimePermission(); 
    }else{ 
      //below Marshmallow 
      //do something 
    } 
} 

@TargetApi(Build.VERSION_CODES.M) 
public void askMultipleRuntimePermission(){ 
    List<String> permissionsNeeded = new ArrayList<String>(); 

    final List<String> permissionsList = new ArrayList<String>(); 
    if (!addPermission(permissionsList, Manifest.permission.ACCESS_FINE_LOCATION)) 
     permissionsNeeded.add("GPS"); 
    if (!addPermission(permissionsList, Manifest.permission.CAMERA)) 
     permissionsNeeded.add("Camera"); 
    if (!addPermission(permissionsList, Manifest.permission.CALL_PHONE)) 
     permissionsNeeded.add("Phone Call"); 
    if (!addPermission(permissionsList, Manifest.permission.WRITE_EXTERNAL_STORAGE)) 
     permissionsNeeded.add("Write File"); 
    if (!addPermission(permissionsList, Manifest.permission.READ_CONTACTS)) 
     permissionsNeeded.add("Read Contacts"); 
    if (!addPermission(permissionsList, Manifest.permission.RECORD_AUDIO)) 
     permissionsNeeded.add("Record Audio"); 


    if (permissionsList.size() > 0) { 
     if (permissionsNeeded.size() > 0) { 
      requestPermissions(permissionsList.toArray(new String[permissionsList.size()]), 
        REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS); 
      return; 
     } 
     requestPermissions(permissionsList.toArray(new String[permissionsList.size()]), 
       REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS); 
     return; 
    } 
    else{ 
     //Do something here 
    } 

} 


@TargetApi(Build.VERSION_CODES.M) 
private boolean addPermission(List<String> permissionsList, String permission) { 
    if (ActivityCompat.checkSelfPermission(this,permission) != PackageManager.PERMISSION_GRANTED) { 
     permissionsList.add(permission); 
     // Check for Rationale Option 
     if (!shouldShowRequestPermissionRationale(permission)) 
      return false; 
    } 
    return true; 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    switch (requestCode) { 
     case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS: { 
      Map<String, Integer> perms = new HashMap<String, Integer>(); 
      // Initial 
      perms.put(Manifest.permission.ACCESS_FINE_LOCATION, PackageManager.PERMISSION_GRANTED); 
      perms.put(Manifest.permission.CAMERA, PackageManager.PERMISSION_GRANTED); 
      perms.put(Manifest.permission.CALL_PHONE, PackageManager.PERMISSION_GRANTED); 
      perms.put(Manifest.permission.WRITE_EXTERNAL_STORAGE, PackageManager.PERMISSION_GRANTED); 
      perms.put(Manifest.permission.READ_CONTACTS, PackageManager.PERMISSION_GRANTED); 
      perms.put(Manifest.permission.RECORD_AUDIO, PackageManager.PERMISSION_GRANTED); 
      // Fill with results 
      for (int i = 0; i < permissions.length; i++) 
       perms.put(permissions[i], grantResults[i]); 
      // Check for ACCESS_FINE_LOCATION 
      if (perms.get(Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED 
        && perms.get(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED 
        && perms.get(Manifest.permission.CALL_PHONE) == PackageManager.PERMISSION_GRANTED 
        && perms.get(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED 
        && perms.get(Manifest.permission.READ_CONTACTS) == PackageManager.PERMISSION_GRANTED 
        && perms.get(Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED) { 
       // All Permissions Granted 
       // Do something next 
      } else { 
       // Permission Denied 
       Log.i("Permission", " some of the permission have been denied"); 
       // Alert user about permission denied, and do something 
      } 
     } 
     break; 
     default: 
      super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    } 
} 

} 
+0

Okay, aber wie implementieren wir Abzeichen Erlaubnis zur Laufzeit –

+0

Emm, der Code wird alles für Sie tun. Sie müssen nur unnötige Manifest.permission.xxxx entfernen, die Sie nicht verwenden und ersetzen sie durch 'com.sec.android.provider.badge.permission.WRITE' –

+0

Aber während ich dies versuche, zeigt es Fehler auf .sec als nicht lösche das Symbol –

Verwandte Themen