我想知道存储"永不再问"复选框布尔标志的位置以及如何清除它的值?不一定是以编程方式,而是手动 - 通过设置,命令或某些工具.尝试清除应用程序数据,卸载,卸载和清除,尝试手动切换权限来回打开/关闭,尝试甚至为模拟器设置较新的Marshmallow图像,但没有运气!
对于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
我有一个扩展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权限?
我的应用使用位置权限.如果在运行时从App Settings撤消此权限并返回到应用程序,则会销毁并重新创建当前活动.如何防止这种活动的重建?
android android-permissions android-6.0-marshmallow runtime-permissions
我在真正的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中重现问题的步骤
<?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) 我写代码要求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) 在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
Android 6.0 或更高版本中显示运行时权限对话框,因此Activity.requestPermissions(...)在 API 级别 23 中添加该对话框是有意义的。
ActivityCompat.requestPermissions(...)但为什么Android 6.0以下要使用另外一个( )呢?这是否会在较低版本中显示运行时权限请求对话框?
有什么区别
Activity.requestPermissions(permissions, requestCode)
Run Code Online (Sandbox Code Playgroud)
和
ActivityCompat.requestPermissions(activity, permissions, requestCode)
Run Code Online (Sandbox Code Playgroud)我应该使用哪一个?
我正在构建一个带有信标集成的 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 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