【发布时间】: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