启动时的运行时权限

Posted

技术标签:

【中文标题】启动时的运行时权限【英文标题】:Runtime Permission at Startup 【发布时间】:2016-11-16 15:18:36 【问题描述】:

我有一个需要 CAMERA 和 WRITE_SETTINGS 权限的手电筒,我需要首先处理我已经知道如何操作的这些权限,然后如果它被授予,例如,开始我的主要活动...... (对不起,我是安卓新手)

【问题讨论】:

【参考方案1】:

在您的清单文件中添加权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CALL_PHONE" />

在“onCreate”内的主要活动 java 文件中添加以下代码

    String[] PERMISSIONS = new String[]
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.CALL_PHONE;
    if (
                    (ContextCompat.checkSelfPermission(MapsActivity.this, PERMISSIONS[0]) != PackageManager.PERMISSION_GRANTED) ||
                    (ContextCompat.checkSelfPermission(MapsActivity.this, PERMISSIONS[1]) != PackageManager.PERMISSION_GRANTED)
            )
    
        ActivityCompat.requestPermissions(MapsActivity.this, PERMISSIONS, REQUEST_INTERNET);
        finish();
    

【讨论】:

【参考方案2】:

从 github 在你的 gradle 文件中添加这个库

比添加这段代码

PermissionListener permissionlistener = new PermissionListener() 
    @Override
    public void onPermissionGranted() 
        //The user have conceded permission
        Toast.makeText(MainActivity.this, "Permission Granted", Toast.LENGTH_SHORT).show();
    

    @Override
    public void onPermissionDenied(ArrayList<String> deniedPermissions) 
        //close the app or do whatever you want
        Toast.makeText(MainActivity.this, "Permission Denied\n" + deniedPermissions.toString(), Toast.LENGTH_SHORT).show();
    
;

new TedPermission(this)
.setPermissionListener(permissionlistener)
.setDeniedMessage("If you reject permission,you can not use this service\n\nPlease turn on permissions at [Setting] > [Permission]")
.setPermissions(Manifest.permission.READ_CONTACTS, Manifest.permission.ACCESS_FINE_LOCATION)
.check();

或者,如果您更喜欢在本地进行,请登录谷歌 docs

【讨论】:

以上是关于启动时的运行时权限的主要内容,如果未能解决你的问题,请参考以下文章

程序启动时如何请求管理员权限?

Flutter插件开发和iOS原生代码:避免应用启动时的权限请求?

在运行时请求管理员权限

在运行时请求管理员权限

我在运行查询时启动了 RDS SQL Server(SQL Server Web 版)并抛出了权限被拒绝错误

这也许是Android权限适配更简单的解决方案