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

2024-01-12

我最近在使用 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/apps 需要 com.sec.android.provider。 bad.permission.WRITE 或 grantUriPermission() 在 android.os.Parcel.readException(Parcel.java:1693) 在 android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:183) 在 android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135) 在 android.content.ContentProviderProxy.delete(ContentProviderNative.java:544)


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

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

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);
    }
}

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

权限拒绝:编写 com.sec.android.provider.badge.BadgeProvider 的相关文章

随机推荐

  • 为什么返回 Java 对象引用比返回原语慢得多

    我们正在开发一个延迟敏感的应用程序 并且一直在对各种方法进行微基准测试 使用jmh http openjdk java net projects code tools jmh 在对查找方法进行微基准测试并对结果感到满意后 我实现了最终版本
  • 如何在Azure Function App中禁用只读模式?

    我从 Azure 门户创建一个新的 Function App v2 然后 我借助 Azure Functions Core Tools v2 3 在本地计算机上启动一个新应用程序 并将其发布到门户上的新应用程序 func init func
  • 如何使用 PHP 从多列中选择最小值

    我有一个包含以下内容的表 6xx 8xx 9xx 11xx 12xx 1 0 01 0 002 0 004 0 001 0 025 2 0 025 0 125 0 002 0 01 0 011 我想找到该列中的最小值 使该列变为绿色 例如
  • 从整数创建 LocalDate 对象

    如果我已经有一个日期的月份 日期和年份作为整数 那么使用它们创建一个日期的最佳方法是什么 LocalDate目的 我找到了这个帖子字符串到本地日期 https stackoverflow com questions 8746084 stri
  • 在 Android 上访问高 fps 相机

    有些手机官方支持高 fps 录制 例如 Galaxy S5 和 S6 我尝试了两者 两者都可以使用默认相机应用程序录制高 fps 视频 60 甚至 120 fps 或者在 S6 上使用 Gear VR 的 直通相机 功能 但是 当您通过标准
  • 防止 PyQt 消除槽中发生的异常

    据我所知 如果 PyQt 下的插槽中发生异常 异常会打印到屏幕上 但不会冒泡 这在我的测试策略中产生了一个问题 因为如果某个槽中发生异常 我将不会看到测试失败 这是一个例子 import sys from PyQt4 import QtGu
  • 使用背景图像作为项目符号对齐中心列表项

    我已经尝试解决这个问题一个小时了 但找不到解决方案 我想要的是一个居中列表 背景图像为 刻度 我要这个 正常工作 除了点与列表左侧对齐之外ul 1140px 宽 而不是列表项的左侧li这是居中的 你可以使用CSS before伪类 ul l
  • 获取给定 DN 的 NT 样式域\用户

    我有 Active Directory 中用户的 DN 我想从中获取 NT 样式 域 用户 sAMAccountname AD 属性为我提供了用户部分 但是域呢 Thanks 您可以通过获取用户 DN 的最后部分 DC domain DC
  • 如何设置每 10 次触发 LLDB 断点?

    要调试高频计时器或传感器的值 配置一个仅每 x 次触发的断点会很有用 实现这一目标的最佳方法是什么 我在 Xcode 中尝试了 停止前忽略 x 次 选项 但这仅适用于第一次 我可以使用 LLDB 命令重置此计数器吗 您可以随时使用以下命令重
  • 子窗体定位如 StatusBar

    我有一个带有菜单栏和状态栏的 MDIForm 当我创建一个子窗体并将其定位为 Align alBottom 时 该窗体会离开屏幕区域 并且主窗体滚动条被激活 如何将子窗体定位在状态栏上方 对于没有父级负责显示它的控件 对齐和锚点并不能真正按
  • Swift - 在面部识别运行后,使用 Apple 登录始终会导致“注册未完成”

    我首先按照本教程使用 Firebase 设置 使用 Apple 登录 https medium com swift products sign in with apple with firebase authentication xcode
  • 针对动态变量的 If 语句[重复]

    这个问题在这里已经有答案了 我正在尝试做类似以下的事情 New Variable Name state name Value True if state name eq True Write Host Pass else Write Hos
  • css和xhtml中的每个元素和属性、属性是否有必要使用小写?

    4 2 元素和属性名称必须小写 XHTML 文档的所有 HTML 元素和属性名称必须使用小写 这种差异是必要的 因为 XML 区分大小写 例如 和 是不同的标签 来源 http www w3 org TR 2002 REC xhtml1 2
  • 多个 selectInput 值会产生意外的 dplyr (postgres) 行为

    我有一个可爱的闪亮应用程序 它接受 selectInput 值 查询 postgres 数据库 并输出一个图表 这是一个简单的界面 但由于 dplyr 数据库连接 很难在这里重现 今天我将第一个 selectInput 值更改为 multi
  • Laravel 表单请求数组验证自定义规则

    我想创建一个表单请求验证 但不知道如何操作 我有一个表格
  • 如何使用excel vba获取href属性

    我想检索的 href 属性 h3 html页面的标签 我能够获取innerText 但我不知道如何访问href属性 有几个 h3 文档中的标签 但目前我只需要第一个 剩下的我稍后再处理 这是我到目前为止得到的代码 Sub Scrap Dim
  • 尝试在java中执行命令时出错[重复]

    这个问题在这里已经有答案了 我正在尝试使用终端但从 java 运行 java 文件 意思是 我将使用 java 运行该命令 我正在尝试执行命令 cd Users apple Documents Documents workspace Use
  • Kivy外规则继承2

    作为后续问题 Kivy 外部规则固有 https stackoverflow com questions 31618565 kivy outside rule inherence Kivy 规则继承与 add widget https st
  • 我们如何配置闪亮的开源服务器来支持并发用户

    我有一个 R Shiny 应用程序 我想使用开源解决方案托管该应用程序以支持大约 50 个并发用户 我遇到了 RStudio 的闪亮服务器 它可以用来将闪亮的应用程序部署到网络上 我想使用shinyserver的开源版本 文档说我们可以使用
  • 权限拒绝:编写 com.sec.android.provider.badge.BadgeProvider

    我最近在使用 Android Nougat 的三星手机上运行我的应用程序时发生崩溃 我没有授予 com sec android provider badge BadgeProvider 的运行时权限 这导致了崩溃 我不知道如何授予此徽章提供