标签: runtime-permissions

如何忘记Android M运行时权限对话框中的"永不再问"选项

在此输入图像描述

我想知道存储"永不再问"复选框布尔标志的位置以及如何清除它的值?不一定是以编程方式,而是手动 - 通过设置,命令或某些工具.尝试清除应用程序数据,卸载,卸载和清除,尝试手动切换权限来回打开/关闭,尝试甚至为模拟器设置较新的Marshmallow图像,但没有运气!

android android-6.0-marshmallow runtime-permissions

7
推荐指数
2
解决办法
1万
查看次数

运行时是否需要互联网持久性请求(Android)?

对于Android,我们需要在运行时询问权限,以确保用户更好地了解何时需要权限.我知道这对于类似的权限是正确的WRITE_CALENDAR,ACCESS_FINE_LOCATION但它似乎不是INTERNET所必需的.并不奇怪,因为几乎所有应用都使用互联

可以说我只需要在清单中声明它吗?

<uses-permission android:name="android.permission.INTERNET" />
Run Code Online (Sandbox Code Playgroud)

或者我应该总是在运行时检查它?

android android-manifest android-permissions runtime-permissions

7
推荐指数
1
解决办法
6975
查看次数

Xamarin - 无法覆盖OnRequestPermissionsResult

我有一个扩展Activity和实现的类IOnRequestPermissionsResultCallback.

我想使用OnRequestPermissionResult和我编码完全一样,在XamarinBlog(部分处理权限请求)和Monodroid Github,但我总是得到no suitable method to override错误.

namespace App1
{
    class Aplication : Android.App.Activity,
                       Android.Support.V4.AppActivityCompat.IOnRequestPermissionsResultCallback
    {

        public override async void OnRequestPermissionsResult(
            int requestCode,
            string[] permissions,
            Permission[] grantResults
        ) { }

    }
}
Run Code Online (Sandbox Code Playgroud)

如何在Xamarin中使用新的Marshmallow权限?

c# android xamarin.android runtime-permissions

7
推荐指数
1
解决办法
4152
查看次数

如何防止在Android M或更高版本中在运行时更改权限时重新创建活动

我的应用使用位置权限.如果在运行时从App Settings撤消此权限并返回到应用程序,则会销毁并重新创建当前活动.如何防止这种活动的重建?

android android-permissions android-6.0-marshmallow runtime-permissions

7
推荐指数
1
解决办法
1208
查看次数

targetSdkVersion 23通过accountManager.getAccounts()返回0长度数组

我在真正的Nexus 5设备Android 6.0.1中观察到以下奇怪的结果

我在推出应用程序时运行以下简单代码.

Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+
AccountManager accountManager = AccountManager.get(this);
Account[] accounts = accountManager.getAccounts();
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,如果我将我设置targetSdkVersion为22,21,19.它返回非空数组.

但是,当我改变targetSdkVersion和测试时

defaultConfig {
    applicationId "org.yccheok.myapplication"
    minSdkVersion 19
    targetSdkVersion 23
    versionCode 1
    versionName "1.0"
}
Run Code Online (Sandbox Code Playgroud)

上面的代码返回0长度数组!

知道为什么在编译时会出现问题targetSdkVersion=23.

请注意,在产生问题期间,无论何时更改targetSdkVersion并通过Android Studio运行,您都需要清除应用数据,清除应用缓存并手动卸载所有用户.

以下是在Nexus 5设备Android 6.0.1中重现问题的步骤

  1. 通过File - > New - > New Projetct在Android Studio中创建项目...
  2. 选择"空白活动"

AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.yccheok.myapplication">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar"> …
Run Code Online (Sandbox Code Playgroud)

android runtime-permissions

6
推荐指数
1
解决办法
2868
查看次数

允许多次运行时权限

我写代码要求run time permission on Android 6.0组中的多个.一切都很好,我为此做了一些很好的例子,但仍然有问题.

ActivityCompat.shouldShowRequestPermissionRationale (context, READ_PHONE_STATE) 它给出错误的上下文 错误的第一个参数上下文.请帮忙解决问题.

提前致谢

代码是:

 if (ContextCompat
                    .checkSelfPermission(SpalshActivity.this,
                            READ_PHONE_STATE)+ContextCompat.checkSelfPermission(context,
                    WRITE_EXTERNAL_STORAGE) +ContextCompat.checkSelfPermission(context,
                    CAMERA) + ContextCompat
                    .checkSelfPermission(context,
                           READ_CONTACTS)+ContextCompat
                    .checkSelfPermission(context,
                            CALL_PHONE)+ContextCompat
                    .checkSelfPermission(context,
                            ACCESS_FINE_LOCATION)+ContextCompat
                    .checkSelfPermission(context,
                            READ_SMS)== PackageManager.PERMISSION_GRANTED) {
                myMethod();

            }
               else {
               if (ActivityCompat.shouldShowRequestPermissionRationale
                        (context, READ_PHONE_STATE) ||ActivityCompat.shouldShowRequestPermissionRationale
                        (context, WRITE_EXTERNAL_STORAGE)||
                        ActivityCompat.shouldShowRequestPermissionRationale
                                (context, CAMERA) ||
                        ActivityCompat.shouldShowRequestPermissionRationale
                                (context, READ_CONTACTS) || ActivityCompat.shouldShowRequestPermissionRationale
                        (context, CALL_PHONE) || ActivityCompat.shouldShowRequestPermissionRationale
                        (context, ACCESS_FINE_LOCATION) || ActivityCompat.shouldShowRequestPermissionRationale
                        (context, READ_SMS)) {
                    Snackbar.make(findViewById(android.R.id.content),
                            "Please Grant Permissions",
                            Snackbar.LENGTH_INDEFINITE).setAction("ENABLE",
                            new View.OnClickListener() {
                                @Override
                                public void onClick(View v) …
Run Code Online (Sandbox Code Playgroud)

android android-permissions runtime-permissions

6
推荐指数
1
解决办法
153
查看次数

在onRequestPermissionsResult中,当用户拒绝权限时,某些设备上的GrantResults返回空

在Shot:中,在onRequestPermissionsResult某些设备上的GrantResults中,PackageManager.PERMISSION_DENIED当用户拒绝该权限时,该设备返回空值,并且某些设备具有值。

基于/sf/answers/2234802391/的答案,我采用了一种解决方案,用于识别用户已选择接受拒绝拒绝,而无需再次询问运行时权限。

根据我看到的许多文档,如果用户拒绝权限,则返回grantResults

我使用的代码else if (grantResults[0] == PackageManager.PERMISSION_DENIED)else if某种程度上会引发Arrayindexoutofbound异常

当用户拒绝权限grantResults不是我的情况时,我已经测试了代码,但是我在Fabric控制台上看到了崩溃报告, grantResults原因是arrayindexoutofbound

 @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case PermissionManager.MY_PERMISSIONS_REQUEST_LOCATION_ACCESS: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    DefineLocationService.start(this);
                    startNextActivity(0);
                } else if …
Run Code Online (Sandbox Code Playgroud)

android permission-denied android-permissions runtime-permissions

6
推荐指数
1
解决办法
918
查看次数

Activity.requestPermissions 与 ActivityCompat.requestPermissions

Android 6.0 或更高版本中显示运行时权限对话框,因此Activity.requestPermissions(...)在 API 级别 23 中添加该对话框是有意义的。

ActivityCompat.requestPermissions(...)但为什么Android 6.0以下要使用另外一个( )呢?这是否会在较低版本中显示运行时权限请求对话框?


permissions android android-permissions runtime-permissions

6
推荐指数
1
解决办法
2684
查看次数

Android 请求权限注释条件

我正在构建一个带有信标集成的 SDK API,它需要 Android 12 及更高版本的蓝牙扫描权限。因此,我为 API 添加了注释,如下所示:

@RequiresPermission(allOf = [Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.BLUETOOTH_SCAN])
fun enableBeaconScan()
Run Code Online (Sandbox Code Playgroud)

当我添加此内容时,我收到警告:

在此输入图像描述

有没有办法限制此权限仅适用于支持的 Android 版本并消除此警告?

android runtime-permissions android-12

6
推荐指数
1
解决办法
351
查看次数

使用 AndroidX ExifInterface 从图像中检索 GPS EXIF 数据?

我的目标是 Android 13 并使用新的照片选择器来检索图像。例如

val photoPicker = rememberLauncherForActivityResult(
        contract = ActivityResultContracts.PickMultipleVisualMedia()
    ) { uris: List<Uri> -> handleUris(context, uris) ) }) }

photoPicker.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))

fun handleUris(context: Context, uris: List<Uri>) {
    for (uri in uris) {
        context.contentResolver.openInputStream(uri)!!.use { stream ->
            ExifInterface(stream).let { exif ->
                val dateTime = exif.dateTime // present
                val latLng = exif.latLong // always null
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我发现了什么:

自 Android 10 起,当您检索媒体时,GPS 信息不再包含在 EXIF 数据中。根据 2019 年的这段视频,您需要请求运行时权限ACCESS_MEDIA_LOCATION

他们解释说这是一个运行时权限,但用户无法在系统设置中看到该权限(这本身就很奇怪)。他们还声称您需要READ_EXTERNAL_STORAGE媒体许可。

这篇文档还讨论了媒体位置权限。

使用以下方式请求许可 …

android runtime-permissions android-jetpack-compose android-exifinterface photo-picker

6
推荐指数
1
解决办法
1685
查看次数