标签: android-permissions

如何从Android Marshmallow中的服务请求权限

在Android Marshmallow中,应在运行时在需要时请求权限,而不是在安装应用程序时立即请求权限.但是,我似乎只能从Activity请求权限,这是一个问题,因为我的应用程序只包含服务.(为什么会这样,你可能会问?该应用程序内部捆绑了一个Android Wear手表,所有手机都会查看附近的照片以发送到手表 - 无需任何活动.但它确实需要位置权限.)

那么,有没有办法从服务请求权限?或者以某种方式强制在安装时授予权限,就像过去一样?

android android-permissions android-6.0-marshmallow wear-os

97
推荐指数
4
解决办法
5万
查看次数

如果我已经有ACCESS_FINE_LOCATION,我可以省略ACCESS_COARSE_LOCATION吗?

我有一个GPS应用程序已经ACCESS_FINE_LOCATION在清单中请求权限,现在我想添加一个需要的库(MoPub)ACCESS_COARSE_LOCATION.

假设这ACCESS_FINE_LOCATION已经足够我是否正确,我可以ACCESS_COARSE_LOCATION从我的清单中遗漏?

android geolocation android-permissions

81
推荐指数
3
解决办法
4万
查看次数

Android 13 - 如何请求 WRITE_EXTERNAL_STORAGE

我的 Android 应用程序的目标版本是 Android 13 (API 33)

WRITE_EXTERNAL_STORAGE 权限似乎在 API 33(即 Android 12 及以下版本)下运行良好,但在 Android 13 上运行应用程序时,不会出现 WRITE_EXTERNAL_STORAGE 的运行时权限弹出窗口。

我的 Android 应用程序在应用程序的私有存储中创建一个密钥库文件。

Android 13 的行为更改提到了这一点:

如果您的应用以 Android 13 为目标平台,则必须请求一项或多项新权限,而不是 READ_EXTERNAL_STORAGE。

新的权限是:

  • 图片和照片:READ_MEDIA_IMAGES
  • 视频:READ_MEDIA_VIDEO 音频
  • 音频文件:READ_MEDIA_AUDIO

我在官方文档中没有找到任何关于此的信息。该文档仅关注媒体文件,没有提及其他文件类型。

https://developer.android.com/about/versions/13/behavior-changes-13#capsular-media-permissions

android android-manifest android-permissions runtime-permissions android-13

80
推荐指数
1
解决办法
11万
查看次数

SYSTEM_ALERT_WINDOW - 如何在Android 6.0和targetSdkVersion 23上自动获得此权限

Facebook,Evernote,Pocket - 所有应用程序都会自动在Android 6.0上获得此权限,即使它们的目标是23(targetSdkVersion=23).

关于新的Marshmallow权限模型有很多文档.其中一个SYSTEM_ALERT_WINDOW被"提升"为"高于危险"的权限级别,因此需要特殊的用户干预才能授予应用程序这些权限.如果应用程序有targetSdkVersion22或更低,app会自动获得此权限(如果在清单中请求).

但是,我注意到一些获得此权限的应用程序,无需将用户发送到设置特殊页面的Draw over other apps权限.我看到Facebook,Evernote,Pocket - 也许还有更多.

任何人都知道在没有用户通过的情况下如何授予应用程序此权限Settings -> Apps -> Draw over other apps

谢谢

android android-permissions target-sdk system-alert-window android-6.0-marshmallow

73
推荐指数
4
解决办法
6万
查看次数

Android 13 - READ_EXTERNAL_STORAGE_PERMISSION 仍然可用

Android 13 的行为更改提到了这一点:

如果您的应用面向 Android 13,则必须请求一项或多项新权限,而不是 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 权限。

https://developer.android.com/about/versions/13/behavior-changes-13#capsular-media-permissions

新的权限是:

  • 图片和照片:READ_MEDIA_IMAGES
  • 视频:READ_MEDIA_VIDEO 音频
  • 音频文件:READ_MEDIA_AUDIO

但是,如果我需要从任意文件夹读取 PDF 文件,该如何处理?没有像 READ_MEDIA_DOCUMENT 之类的权限。那么除图像、视频或音频之外的其他文件类型呢?我仍然可以对它们使用 READ_EXTERNAL_STORAGE 权限吗?

我在官方文档中没有找到有关此内容的任何信息,但说实话,该文档仅关注媒体文件,没有任何有关其他文件类型的信息(https://developer.android.com/about/versions/13/行为更改13#细粒度媒体权限)。

我也不确定除视频、图像和音频之外的其他文档类型的 WRITE_EXTERNAL_STORAGE 权限。

android android-permissions android-13

73
推荐指数
2
解决办法
11万
查看次数

如何检查片段中的权限

我想检查片段内的权限.

我的代码:

        // Here, thisActivity is the current activity
        if (ContextCompat.checkSelfPermission(getActivity(),
                Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {


            // Should we show an explanation?
            if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity(),
                    android.Manifest.permission.ACCESS_FINE_LOCATION)) {

                // Show an explanation to the user *asynchronously* -- don't block
                // this thread waiting for the user's response! After the user
                // sees the explanation, try again to request the permission.

            } else {

                // No explanation needed, we can request the permission.

                ActivityCompat.requestPermissions(getActivity(),
                        new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                        1);



                // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
                // app-defined int …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-permissions

69
推荐指数
6
解决办法
7万
查看次数

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

Android M Camera Intent +权限错误?

我正在尝试让我的应用程序为新的Android M权限更改做好准备,并发现了一些奇怪的行为.我的应用程序使用相机意图机制允许用户从相机获取图片.但是在另一个活动中需要使用具有Camera权限的摄像头本身(因为需要这个的库依赖card.io).

但是,当我尝试启动Camera意图时,只需要相机意图的活动中的M我看到以下崩溃(如果我从Manifest中删除了Camera权限,则不会发生这种情况),

> 09-25 21:57:55.260 774-8053/? I/ActivityManager: START u0
> {act=android.media.action.IMAGE_CAPTURE flg=0x3000003
> pkg=com.google.android.GoogleCamera
> cmp=com.google.android.GoogleCamera/com.android.camera.CaptureActivity
> (has clip) (has extras)} from uid 10098 on display 0 09-25
> 21:57:55.261 774-8053/? W/ActivityManager: Permission Denial: starting
> Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3000003
> pkg=com.google.android.GoogleCamera
> cmp=com.google.android.GoogleCamera/com.android.camera.CaptureActivity
> (has clip) (has extras) } from null (pid=-1, uid=10098) with revoked
> permission android.permission.CAMERA 09-25 21:57:55.263 32657-32657/?
> E/ResolverActivity: Unable to launch as uid 10098 package
> com.example.me.mycamerselectapp, while running in android:ui 09-25
> …
Run Code Online (Sandbox Code Playgroud)

android android-camera android-camera-intent android-permissions android-6.0-marshmallow

65
推荐指数
4
解决办法
5万
查看次数

在Android M的运行时权限中,我们如何区分永不问及停止请求?

根据Google的说法,当谈到M Developer Preview运行时权限时:

  1. 如果您之前从未要求过某种许可,那就请求它

  2. 如果您之前询问过,并且用户说"不",然后用户尝试执行需要被拒绝权限的操作,则应该在再次请求权限之前提示用户解释您需要权限的原因

  3. 如果您之前曾多次询问,并且用户已经说"不,并且停止询问"(通过运行时权限对话框上的复选框),您应该停止打扰(例如,禁用需要权限的UI)

但是,我们只有一个方法,shouldShowRequestPermissionRationale()返回a boolean,我们有三个状态.我们需要一种方法来区分从未问过的状态和停止询问状态,就像我们falseshouldShowRequestPermissionRationale()两者中得到的那样.

对于首次运行应用程序时请求的权限,这不是一个大问题.有很多方法可以确定这可能是您的应用程序的第一次运行(例如,booleanSharedPreferences),因此您假设如果它是您的应用程序的第一次运行,那么您处于从未问过的状态.

但是,运行时权限的一部分愿景是您可能不会事先要求所有这些权限.当用户点击需要该权限的内容时,您可能仅在稍后要求的边缘功能上绑定权限.在这里,应用程序可能已运行多次,持续数月,之后我们突然需要再次请求权限.

在这些情况下,我们是否应该跟踪我们是否自己要求获得许可?或者Android M API中是否有我遗漏的东西告诉我们之前是否询问过?

android android-permissions android-6.0-marshmallow

62
推荐指数
3
解决办法
2万
查看次数

针对 Android 10 时的 WRITE_EXTERNAL_STORAGE

AS 中有一个关于 的 lint 警告android.permission.WRITE_EXTERNAL_STORAGE。该警告表示,当面向 Android 10 及更高版本时,该权限将不再提供写入访问权限。删除上述权限仍然可以写入内部存储文件夹Pictures/MY_APP_NAME以保存图像,但它仅适用于 Android 10 (SDK 29) 和/或更高版本(尚未在 Android R 上测试)。当我在 Android M (SDK 23) 等低版本上再次测试时,保存图像停止工作,所以我决定返回android.permission.WRITE_EXTERNAL_STORAGE因此警告再次出现。lint 是否可能只是误报,在不同情况下错误地诊断了问题?因为目前我的支持 SDK 从 21 开始到最新的 30,但 lint 仅指出在针对 Android 10 (SDK 29) 时不再需要它,并且没有考虑回顾项目的最低 SDK 支持。

android android-permissions

62
推荐指数
4
解决办法
3万
查看次数