我们的应用程序依赖三星附件协议在我们的Android应用程序和Galaxy Watch应用程序之间进行通信。在将我们的目标和编译SDK从API 29级升级到30级(为在未来几个月内发布Android 11做准备)之后,手表和手机应用程序将不再连接。除了升级SDK之外,没有其他在应用程序中进行的更改。使用三星附件SDK2.6.1的最新版本。
有没有人找到了解决Android 11问题的解决方案?还是我们只需要等待三星解决这个问题呢?
发布于 2021-06-23 15:18:08
Jordan提供的答案是正确的,但我想解释一下为什么,并向清单添加更多查询权限。
从API 30开始,Android决定不允许查询除Android系统应用程序之外的所有包。常规应用程序必须为要查询的每个包提供显式权限。这只是另一个例子,我们应该集体感谢谷歌根本不关心向后兼容性。
如果您反编译SAP代码,您将看到查询不同类型的包。
public static String a = "com.samsung.accessory";
PackageManager packageManager = paramContext.getPackageManager();
try {
PackageInfo packageInfo;
if ((packageInfo = packageManager.getPackageInfo(a, 0)) != null) {
...
try {
int i = (paramContext.getPackageManager().getPackageInfo("com.samsung.android.providers.context", 128)).versionCode;
...
etc.由于我没有足够的时间来分析所有可能的情况和场景,当SAP代码被调用时,我想要更安全,而不是因为沮丧的用户而感到遗憾,所以我只添加了所有这些情况和场景,所以我的查询权限如下:
<queries>
<package android:name="com.samsung.accessory" />
<package android:name="com.samsung.android.providers.context" />
<package android:name="com.samsung.android.app.watchmanager" />
<package android:name="com.samsung.accessory.safiletransfer" />
<package android:name="com.samsung.accessory.goproviders" />
<package android:name="com.samsung.accessory.saproviders" />
</queries>发布于 2020-08-06 21:13:46
你回答了问题。我猜想,三星在自己的设备上推出Android 11之前--这将远远落后于Android 11将成为谷歌设备的最高水平--实际上会解决这些问题。我知道还有许多其他问题。只是在等着修理。
发布于 2021-06-23 14:05:04
差不多一年后,我找到了这个问题的答案,因为我当时只满足于Android 10。由于Android 11中所做的更改,需要将其添加到应用程序清单中:
<queries><package android:name="com.samsung.accessory"/></queries>添加这一行修复了问题,三星的附件协议再次工作。
https://stackoverflow.com/questions/63290753
复制相似问题