Since Android 6.0 you need to request permissions at Runtime before you need them.
The example below is for the WRITE permission (I guess you’d like to add a badge to the app icon and normally you don’t need the READ permission for this – if you need it you can request it just like the WRITE permission)
First add your permissions in the Manifest:
<uses-permission android:name="com.sec.android.provider.badge.permission.WRITE"/>
Then you can check if they are granted at Runtime like this:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_SETTINGS) != PackageManager.PERMISSION_GRANTED) { //permissions not granted -> request them requestPermissions(new String[] {Manifest.permission.WRITE_SETTINGS}, YOUR_REQUEST_CODE); } else { //permissions are granted - do your stuff here :) }
The result will be available in onRequestPermissionResult
:
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == YOUR_REQUEST_CODE) { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_SETTINGS) == PackageManager.PERMISSION_GRANTED) { //permissions granted -> do your stuff ;-) } //Permission not granted -> react to it! return; } super.onRequestPermissionsResult(requestCode, permissions, grantResults); }
You can read more about it in the official docs