Android 11(目标 30)引入了包可见性限制。
他们添加了允许绕过这些限制的 QUERY_ALL_PACKAGES,并且只允许特定的应用程序使用它。
该权限的保护级别是NORMAL,所以我想知道如何强制限制该权限。
在文档中,他们说:
在即将发布的政策更新中,请查找 Google Play 来为需要 QUERY_ALL_PACKAGES 权限的应用提供指南。
有谁知道哪里可以找到此政策更新?
我的代码在任何低于 Android 11 的 Android 系统上都能完美运行。在 Android 11 上(特别是在 Pixel2 和 Pixel3 模拟器和真实设备上),文件描述符在将其插入媒体存储后无法找到该文件。
如果我将第二行的相对路径更改为仅 Environment.DIRECTORY_MOVIES 路径 - 它可以工作
String relativeLocation = Environment.DIRECTORY_MOVIES;
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
String mimeType = "video/mp4";
String relativeLocation = Environment.DIRECTORY_MOVIES + File.separator + SUB_DIRECTORY_NAME ;
shortFileName = getDateStamp() + selectedExtension;
videoContentValues = new ContentValues();
videoContentValues.put(MediaStore.Video.Media.TITLE, shortFileName);
videoContentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, shortFileName);
videoContentValues.put(MediaStore.MediaColumns.MIME_TYPE, mimeType);
videoContentValues.put(MediaStore.Video.Media.DATE_ADDED, System.currentTimeMillis() / 1000);
videoContentValues.put(MediaStore.Video.Media.DATE_TAKEN, System.currentTimeMillis());
videoContentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, relativeLocation);
videoContentValues.put(MediaStore.MediaColumns.IS_PENDING, 1);
videResolver = mContext.getContentResolver();
Uri contentUri = MediaStore.Video.Media.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
videoUri = videResolver.insert(contentUri, videoContentValues);
if (videoUri == null) {
throw new IOException("Failed …Run Code Online (Sandbox Code Playgroud) 我正在新的 Android studio 预览版上尝试网络类型 5G 上的 Android 11。我的目标是获取单元信息详细信息。但是,方法 getAllCellInfo() 在模拟器上返回空/空列表。Android 11 之前的所有模拟器都会返回有效值。我需要做任何额外的配置才能使其在 Android 11 上运行吗?
我已经在我的应用程序中实现了从电话簿中选择联系人的功能。为了使动作 PICK 的意图在 android 11 上工作,我将其添加到我的清单中:
<queries>
<intent>
<action android:name="android.intent.action.PICK" />
<data android:mimeType="vnd.android.cursor.dir/phone_v2" />
</intent>
</queries>
Run Code Online (Sandbox Code Playgroud)
该代码在 Android 版本 10 及更低版本上运行良好。但在 Android 版本 11 上,我从电话簿中选择的联系人不会插入到我的应用程序的文本字段中,因为 ContentResolver.query 返回空光标。it.moveToFirst() 返回 false 这是我的代码:
Constants.START_PICK_CONTACT_ACTION -> {
data?.data?.let { uri ->
activity.contentResolver.query(uri, null, null, null, null)?.use {
if (it.moveToFirst()) {
val number: String? = it.getString(it.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
etPhoneNumber.setText(number)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
请帮我。
如何找到以编程方式选择的麦克风权限选项是“每次询问”(仅这一次)?
int permissionCheck = ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.RECORD_AUDIO);
Run Code Online (Sandbox Code Playgroud)
如果通过“仅在使用应用程序时允许”或“每次询问”(仅这一次)授予权限,以上代码将返回 true。
但我想区分以上两种类型的许可。
[更新] 使用案例:- 如果应用程序被授予“一次性权限”并将应用程序移至后台超过 20 秒,则会导致一次权限被撤销。一旦权限被撤销,应用程序就会重新启动活动。因此,我想在用户选择一次权限时发出警报(吐司或对话框)。
我们用来获取 MAC 地址,但从Android 11 中的 MAC 地址可用性变化NetworkInterface.getHardwareAddress()可以看出,现在它不会用于Android\xc2\xa011。
有解决方案或任何指南吗?
\n使用老式标志,我们可以创建一个仅将半透明参数应用于状态栏的应用程序。
window.decorView.systemUiVisibility = window.decorView.systemUiVisibility or
View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
window.statusBarColor = Color.TRANSPARENT
Run Code Online (Sandbox Code Playgroud)
但在新的 api 中,window.setDecorFitsSystemWindows(false)状态栏和导航栏都应用了半透明。那么,新的 api 提供的功能较少,还是我遗漏了一些东西?
我有两个应用程序。这是一种前台服务,不使用 Android 11 中引入的任何权限(相机、位置等)。我有连接到我的服务的客户端应用程序。在 Android 8 中,此连接有效,但是在 Android 11 环境中,调用 context.BindService() 始终返回 false。
这是服务清单:
<service
android:name="com.mypackage.myService"
android:enabled="true"
android:exported="true"
tools:ignore="ExportedService">
</service>
Run Code Online (Sandbox Code Playgroud)
这是我在客户端中使用的连接函数:
fun connect(context: Context): Boolean {
Intent().also {
it.component = ComponentName(
context.getString(R.string.middleware_package),
context.getString(R.string.middleware_service)
)
val bound = context.bindService(it, connection, Context.BIND_AUTO_CREATE)
if (!bound) {
Log.e(LOG_TAG, "Unable to connect to service. Is the service installed?")
}
return bound
}
}
Run Code Online (Sandbox Code Playgroud)
在 android 文档中,bindService() 指出,“如果系统找不到该服务或者您的客户端没有绑定到该服务的权限”,它将返回 false。由于我的服务不使用任何新的 android 11 权限,我假设它现在无法正确找到该服务?怎么会这样?
我使用了这个库 \xc2\xa0 https://github.com/Dhaval2404/ImagePicker \xc2\xa0 并且我收到了来自 android play 控制台团队的警告我们检测到您的应用程序在清单文件中包含 requestLegacyExternalStorage 标志您的 1 个或多个应用程序包或 APK。在运行 Android 11+ 的设备上运行应用的开发人员必须使用范围存储,以便用户更好地控制其设备存储。要在 5 月 5 日之后在 Android 11 或更高版本上发布您的应用,您必须:\xc2\xa0
\n背景: 我们有一个应用程序可以为一群人进行时间登记。在此示例中,我们使用 Zebra TC26(型号:TC26BK-11A222-A6),并通过扫描对多人进行打卡。接下来,应用程序会跟踪手机的 GPS 位置,以定位在哪个字段中执行活动。然后,农民可以更准确地计算每块田地的成本。
这个功能在 android 10 之前都工作得很好。现在我的设备上在 1 小时或 1 小时 30 分后我没有得到新的位置。在另一台设备上,我有时会得到更长的时间,但也会停止。从Android 10开始我遇到了问题,我在网上找到了很多信息,但似乎并没有解决问题。正常工作日:
所以在工作期间他们不使用手机。
额外的:
清单:(我遗漏了一些权限和 antiDozeService,因为我认为它们与 GPS 部分无关)
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
<activity android:name=".SplashActivity"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category …Run Code Online (Sandbox Code Playgroud) android-11 ×10
android ×9
5g ×1
android-10.0 ×1
android-gps ×1
cellinfo ×1
location ×1
mac-address ×1
manifest ×1
mediastore ×1
service ×1