【问题标题】:Multiple overlapped permission submit dialogs issue on AndroidAndroid上的多个重叠权限提交对话框问题
【发布时间】:2020-07-21 12:11:07
【问题描述】:

我有一个应用需要访问多个硬件资源,因此它必须授予用户不同的权限。

在应用程序的初始版本中,我的需求只是将视频从相机录制到存储中,所以我有一个这样的清单:

...
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
...

请注意,显示的两行代码是我管理权限所需的唯一代码,因为显然其中没有一个被标记为“危险”,因此不需要动态(在运行时)管理来自用户。

这么说吧,在新版本的应用中,客户端要求我们为捕获的视频添加音频,所以我们需要在清单中添加一行:

...
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
...

此外,由于访问录音功能被认为是“危险的”,清单行是不够的,我现在必须在运行时借助代码在我的 Activity 中管理权限,如下所示:

...
//permissions
private static final int _MY_PERMISSIONS_RECORD_AUDIO = 1001;
private static final String [] _permissions = {
    Manifest.permission.RECORD_AUDIO
};
...

然后我向用户请求录音权限:

...
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    requestRecordAudioPermission();
    
    ...
}

...

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    //
    switch (requestCode){
        case _MY_PERMISSIONS_RECORD_AUDIO:
            if (grantResults[0] != PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(this, "Permissions denied to record audio", Toast.LENGTH_LONG).show();
                    //
                finish();
            }
    }
}

...

private void requestRecordAudioPermission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (checkSelfPermission(Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
            requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO}, _MY_PERMISSIONS_RECORD_AUDIO);
        }
    }
}
...

有了这一切,我得到了一个奇怪的行为,显示了预期的权限对话框,但请注意,我们一直有其他时间在后面(当然,我从一个对话框传递到下一个按下允许按钮):

最后:

如何摆脱烦人的底层“需要相机权限”对话框?

最好的问候。

【问题讨论】:

  • 我猜是买一个不同的设备。最后的屏幕截图似乎不是标准的 Android 权限对话框。
  • 好吧,我认为三星 Tab S4 不会成为标准设备。
  • 设备制造商改变了各种各样的事情,三星是一个重大的罪犯。您需要准确缩小应用程序中触发该对话框的代码行。例如,如果它是requestPermissions(new String[]{Manifest.permission.RECORD_AUDIO}, _MY_PERMISSIONS_RECORD_AUDIO);,那么三星正在做一些奇怪的事情,除了可能在你的清单中没有CAMERA 权限之外,你不可能做很多事情。
  • 与摩托罗拉 Moto G6 和 Redmi Note 9 相同的行为/对话框。

标签: android permissions


【解决方案1】:

奇怪的对话框位于嵌入式 Fragment(来自库)上,它自己管理相同的危险权限。

感谢您的宝贵时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多