标签: android-11

Android API 级别 30 setSystemBarsAppearance 不会覆盖主题数据

Android 11 之前(API 级别 30)我已经 <item name="android:windowLightStatusBar">true</item> 在我的主题中设置,并且还在代码中(在需要时)使用

fun setLightStatusBar(){ 
    window?.decorView?.let { it.systemUiVisibility = it.systemUiVisibility or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR }
} 

fun setDarkStatusBar(){
    window?.decorView?.let { it.systemUiVisibility = it.systemUiVisibility and View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv() }
}
Run Code Online (Sandbox Code Playgroud)

然而,Android-30 增加了一种新的控制方式

fun setLightStatusBar(){ 
    window?.insetsController?.setSystemBarsAppearance(APPEARANCE_LIGHT_STATUS_BARS, APPEARANCE_LIGHT_STATUS_BARS)
} 

fun setDarkStatusBar(){
    window?.insetsController?.setSystemBarsAppearance(0, APPEARANCE_LIGHT_STATUS_BARS)
}
Run Code Online (Sandbox Code Playgroud)

但我的问题是这不能覆盖主题集值,因此我需要全部使用样式或全部使用代码。

我的问题是,这是打算像这样还是我在某处遗漏了什么?

android android-theme android-styles windowinsets android-11

16
推荐指数
1
解决办法
1071
查看次数

Android 11 中的 GetNetworkType

根据此处发布的更改,Android R 及以后不推荐使用 getNetworkType 方法。

在 R 编译的应用程序中尝试使用此方法时,会导致抛出以下异常:

java.lang.SecurityException: getDataNetworkTypeForSubscriber: uid 10225 does not have android.permission.READ_PHONE_STATE.
  at android.os.Parcel.createExceptionOrNull(Parcel.java:2285)
  at android.os.Parcel.createException(Parcel.java:2269)
  at android.os.Parcel.readException(Parcel.java:2252)
  at android.os.Parcel.readException(Parcel.java:2194)
  at com.android.internal.telephony.ITelephony$Stub$Proxy.getNetworkTypeForSubscriber(ITelephony.java:7565)
  at android.telephony.TelephonyManager.getNetworkType(TelephonyManager.java:2964)
  at android.telephony.TelephonyManager.getNetworkType(TelephonyManager.java:2928)
  at com.ironsource.environment.ConnectivityService.getCellularNetworkType(ConnectivityService.java:197)
  at com.ironsource.sdk.service.DeviceData.updateWithConnectionInfo(DeviceData.java:98)
  at com.ironsource.sdk.service.DeviceData.fetchMutableData(DeviceData.java:54)
  at com.ironsource.sdk.service.TokenService.collectDataFromDevice(TokenService.java:120)
  at com.ironsource.sdk.service.TokenService.getRawToken(TokenService.java:177)
  at com.ironsource.sdk.service.TokenService.getToken(TokenService.java:166)
  at com.ironsource.sdk.IronSourceNetwork.getToken(IronSourceNetwork.java:183)
Run Code Online (Sandbox Code Playgroud)

这很好,根据文档是预期的。如果我将应用程序编译为 Android R 之前的任何版本,则不会显示异常。

此异常表示我需要请求android.permission.READ_PHONE_STATE权限。

我想知道是否有办法使用不需要此权限的任何其他 API 获取网络类型(因为此权限的级别很危险,我宁愿不要求用户提供)。

telephonymanager android-11

15
推荐指数
1
解决办法
8585
查看次数

在 Android 11 上调用 getPackageInfo 时出现 NameNotFoundException

设置完成后targetSdkVersion,以30(安卓11)我得到android.content.pm.PackageManager$NameNotFoundException这样做时,packageManager.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS)在包装上,我知道存在。

堆栈跟踪如下:

android.content.pm.PackageManager$NameNotFoundException: com.google.android.apps.maps
        at android.app.ApplicationPackageManager.getPackageInfoAsUser(ApplicationPackageManager.java:202)
        at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:174)
Run Code Online (Sandbox Code Playgroud)

android android-permissions android-11

14
推荐指数
2
解决办法
4694
查看次数

Android-11“仅此一次”权限行为

在 Android-11 中,如果我选择Only This Time权限并访问相机,则:

观察到的行为:在我们 终止应用程序One-Time permission后,保持几秒钟(大约 3-5 秒) 。如果我立即或在这么短的时间之前重新打开应用程序,那么权限将保持授予状态,如果我在这么短的时间之后重新打开它,那么它将再次请求权限并且工作正常。

预期行为:在我们终止应用程序后,权限将立即被撤销,而不是等待任何特定的时间段。

有没有解决办法,或者是 Android-11 中的一个错误?此外,与之相关的文档中没有提及任何内容。https://developer.android.com/guide/topics/permissions/overview#one-time

(PS:所有与权限相关的检查都已在代码中实现。)

android android-11

13
推荐指数
0
解决办法
6565
查看次数

某些应用程序如何在没有 root 的情况下访问 Android 11 上“.../Android/...”子文件夹的内容?

背景

Android 10 和 11各种存储限制,其中还包括访问所有文件的新权限 ( MANAGE_EXTERNAL_STORAGE )(但它不允许访问真正的所有文件),而之前的存储权限已减少以仅授予对媒体的访问权限文件:

  1. 应用程序可以自由访问“媒体”子文件夹。
  2. 应用程序永远无法访问“数据”子文件夹,尤其是内容。
  3. 对于“obb”文件夹,如果应用程序被允许安装应用程序,它可以访问它(将文件复制到那里)。否则不能。
  4. 使用 USB 或 root,您仍然可以访问它们,作为最终用户,您可以通过内置的文件管理器应用程序“文件”访问它们。

问题

我注意到一个名为“ X-plore ”的应用程序以某种方式克服了这个限制(此处):一旦您进入“Android/data”文件夹,它会要求您授予对它的访问权限(直接使用 SAF,不知何故),并且当您授予它,您可以访问“Android”文件夹的所有文件夹中的所有内容。

这意味着可能仍然有一种方法可以达到它,但问题是由于某种原因,我无法制作具有相同效果的样本。

我发现并尝试过的

该应用程序似乎针对 API 29 (Android 10),并且它尚未使用新权限,并且它具有标志requestLegacyExternalStorage。我不知道他们在针对 API 30 时使用的相同技巧是否有效,但我可以说,在我的情况下,在 Pixel 4 和 Android 11 上运行,它工作正常。

所以我尝试做同样的事情:

  1. 我制作了一个针对 Android API 29 的示例 POC,已授予(各种)存储权限,包括遗留标志。

  2. 我试图请求直接访问“Android”文件夹(基于此处),但遗憾的是由于某种原因无法正常工作(一直转到 DCIM 文件夹,不知道为什么):

val androidFolderDocumentFile = DocumentFile.fromFile(File(primaryVolume.directory!!, "Android"))
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
        .setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) 
        .putExtra(DocumentsContract.EXTRA_INITIAL_URI, androidFolderDocumentFile.uri)
startActivityForResult(intent, 1)
Run Code Online (Sandbox Code Playgroud)

我尝试了各种标志组合。

  1. 启动应用程序时,当我自己手动到达“Android”文件夹时,因为这不能正常工作,我授予了对该文件夹的访问权限,就像在其他应用程序上一样。

  2. 获取结果时,我尝试获取路径中的文件和文件夹,但无法获取它们:

override fun onActivityResult(requestCode: Int, resultCode: Int, …
Run Code Online (Sandbox Code Playgroud)

android storage-access-framework android-11

13
推荐指数
1
解决办法
3691
查看次数

如何获取 Android 11 中已安装应用的列表

开发者网站上描述了这一行,但我没有完全理解它

Call getInstalledApplications() or getInstalledPackages(). Both methods should return a filtered list.
Run Code Online (Sandbox Code Playgroud)

事实上,我需要测试Testing package visibility behavior

https://developer.android.com/training/package-visibility/testing

android android-package-managers android-update-app android-11

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

一次性权限导致后台计划作业和警报被取消

我们开发了一个 Android SDK,在测试 Android 11 Beta 时,我们发现了一个似乎尚未报告的问题。

在 Android 11 中,为位置、麦克风和相机权限引入了新的一次性权限。使用此选项,一旦用户离开应用程序,权限就会被撤销(更多详细信息可在此处找到)。

问题是,在应用程序不再处于前台的一小段时间之后(不需要杀死应用程序,只需最小化就足够了),所有未来预定的警报或作业都会被删除,就像应用程序被强制一样被杀。这仅发生在此级别的权限下。拒绝或提供其他级别会按预期保留先前安排的警报或作业。我们已在 Beta 3 版本中使用 RPB3.200720.005 版本号在 Pixel 2 模拟器中重现了这一点。在此repo 中,您可以找到用于重现错误的示例应用程序。

这个单一的活动应用程序会在接下来的 5 分钟内安排一个闹钟响铃,并在 5 到 6 分钟内触发一个作业。屏幕上有三个按钮,每个按钮都会触发相应的权限请求。JobService 和 BroadcastReceiver 类只记录它们已被触发。可以通过以下步骤重现该情况:

  1. 每当应用程序启动时,都可以同时运行adb shell dumpsys alarm | grep com.example.permissions.appadb shell dumpsys jobscheduler | grep com.example.permissions.app看到警报和作业都已安排;
  2. 单击任一按钮并授予一次性权限级别;
  3. 最小化应用程序(您可以转到主屏幕或打开其他应用程序);
  4. 大约一分钟后,同时运行adb shell dumpsys alarm | grep com.example.permissions.appadb shell dumpsys jobscheduler | grep com.example.permissions.app。警报和作业将不再出现;
  5. 等待作业和警报的原始预定时间(对系统延迟宽容)将表明它们不会被触发。

大家有遇到过类似的情况吗?我们的预感是,为了撤销一次性权限,应用程序进程会以某种方式被终止,从而导致这些副作用。我们还在Android Issue Tracker上提交了一个问题,如果 Google 回答了这个问题 …

android alarmmanager android-permissions android-11

12
推荐指数
1
解决办法
347
查看次数

针对 Android 11 时 SpeechRecognizer 不可用

虽然测试增加了targetLevel 30后的应用程序,我发现SpeechRecognizer没有提供任何更多,即SpeechRecognizer.isRecognitionAvailable() 总是返回false。

如果我将 targetLevel 设置回 29,而不更改任何其他内容,则它再次可用。这发生在真实设备(Pixel 3a)和模拟器上。

这似乎不是行为改变。Recognizer API 提到的唯一要求是Manifest.permission.RECORD_AUDIO

我在 logcat 中也没有发现任何线索。

android android-speech-api android-11

12
推荐指数
1
解决办法
2006
查看次数

如何解决运行 Android 11 (SDK 30) 的应用程序中的崩溃问题

我从未见过这样的堆栈跟踪,也不知道如何进行故障排除。它没有发生在 Android 10 (SDK 29) 或更早版本中。该应用程序使用 androidx 支持库和 SDK 30 构建。

发生这种情况的电话:

Samsung Note 10+ 5G running on SDK 30
Run Code Online (Sandbox Code Playgroud)

任何指针表示赞赏。

这就是我可以从 PlayStore 获得的所有信息:

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
pid: 0, tid: 0 >>> app-package-name <<<

backtrace:
  #00  pc 00000000038621f0  /data/app/~~dDiCj_8810kb6DPfFJq1VA==/com.google.android.trichromelibrary_438909034-1CcX13lT2sfyKsCGVu4mkA==/base.apk!libmonochrome_64.so (offset 0x646000)
Run Code Online (Sandbox Code Playgroud)

crash android android-webview android-11

12
推荐指数
1
解决办法
2849
查看次数

Google Play 应用程序拒绝 - 不是核心功能 - 使用所有文件访问权限

我在 Play 商店中有一个应用程序,该应用程序targetSdkVersion已更新为30from 29,更新后该应用程序一次又一次被 Google Play 拒绝。

MANAGE_EXTERNAL_STORAGE此前, SDK Manifest 中有一项权限。

从我的应用程序中完全删除MANAGE_EXTERNAL_STORAGE 权限和存储权限 (WRITE_EXTERNAL_STORAGE ) 后,将应用程序上传到商店,应用程序更新再次被拒绝。

这是从 Google Play 收到的拒绝原因电子邮件。

注意:我将所有媒体文件保存在应用程序特定的内部存储中。

另外,我在我的 SDK 中获得了许可READ_EXTERNAL_STORAGE,因为我们的应用程序中有聊天功能,可以获取设备的图像和视频来发送。

根据许可没有影响。Use of All files access (MANAGE_EXTERNAL_STORAGE) permission READ_EXTERNAL_STORAGE

附参考。

更新

我也删除了READ_EXTERNAL_STORAGE该应用程序的权限,但仍然遭到 Google Play 出于相同原因的拒绝。

是存储策略的问题还是其他问题?

mediastore google-play google-play-console scoped-storage android-11

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