首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >权限拒绝:编写com.sec.android.provider.badge.BadgeProvider

权限拒绝:编写com.sec.android.provider.badge.BadgeProvider
EN

Stack Overflow用户
提问于 2017-02-23 11:10:52
回答 2查看 5.8K关注 0票数 7

我最近在使用android Nougat的三星手机上运行我的应用程序时遇到了崩溃。我没有给com.sec.android.provider.badge.BadgeProvider的运行时权限,这导致了崩溃。我不知道如何为这个徽章提供者提供运行时权限,如果有人知道,请帮助我。

崩溃报告如下

java.lang.SecurityException:权限拒绝:从pid=5325、uid=10242写入com.sec.android.provider.badge.BadgeProvider uri content://com.sec.badge/pid=5325需要在android.os.Parcel.readException(Parcel.java:1693) at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183) at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135) at android.content.ContentProviderProxy.delete(ContentProviderNative.java:544)使用com.sec.android.provider.badge.permission.WRITE,或grantUriPermission()

EN

回答 2

Stack Overflow用户

发布于 2017-02-23 11:28:59

这是我用来在运行时请求多个权限的模板。您需要根据自己的需求进行修改

您还需要在清单中包含<uses-permission android:name="com.sec.android.provider.badge.permission.WRITE"/><uses-permission android:name="com.sec.android.provider.badge.permission.WRITE"/>

代码语言:javascript
运行
复制
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);
    }
}

}
票数 1
EN

Stack Overflow用户

发布于 2020-12-15 13:05:43

也将其添加到清单文件中。我发现我的三星SM-J250F也有类似的问题

代码语言:javascript
运行
复制
    <uses-permission android:name="com.sec.android.provider.badge.permission.READ"/>

与写入权限一起使用

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42406284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档