我在Google
Play上的应用出现问题。我有一个免费的应用程序,它利用了自定义权限。此权限允许访问付费应用。这些付费应用程序充当“键”,并在免费应用程序中解锁功能。基本上,免费应用会尝试启动其中一款付费应用的意图。付费应用程序会做一些事情,然后返回免费应用程序是否应该解锁功能。
根据应用安装的顺序出现问题。如果先安装了免费应用程序,然后再安装了付费应用程序,则免费应用程序无法启动意图。返回拒绝权限。如果先安装了付费应用程序,然后安装了免费应用程序,则免费应用程序可以毫无问题地启动意图。重新启动设备和/或强制停止应用无法解决问题。我附上了相关代码。告诉我我做错了什么。
...
<uses-permission android:name="com.company.license.PERMISSION" />
...
Intent KeyApp = new Intent("com.company.license.action.AUTH_1");
KeyApp.putExtra("com.company.license.challenge", 1);
//If free app is installed first, an exception is thrown for not having the proper permission. If paid app is installed first, no exception is thrown
try {
startActivityForResult(KeyApp, COMMING_FROM_KEYAPP);
} catch (Exception e) {
cancelStartUp();
}
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.company.installer.1"
...
<permission
android:name="com.company.license.PERMISSION"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:protectionLevel="normal" >
</permission>
<application
android:icon="@drawable/icon"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoDisplay" >
<activity
android:name="com.company.license.auth"
android:configChanges="keyboardHidden|orientation"
android:exported="true"
android:permission="com.company.license.PERMISSION"
android:theme="@style/Theme.Transparent" >
<intent-filter>
<action android:name="com.company.license.action.AUTH_1" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name="com.company.installer.redirect"
android:configChanges="keyboardHidden|orientation"
android:exported="true"
android:theme="@style/Theme.Transparent" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
<permission>
在两个应用程序中放置相同的元素。另外,由于这是针对您的两个应用程序的,因此我将使用android:protectionLevel="signature"
而不是normal
-这意味着用户将永远不需要批准许可,并且没有其他人可以请求许可。并且,此配方将允许以任一顺序进行安装。
更新 :但是请注意,由于Android的“第一个获胜”方法,自定义权限的使用会打开潜在的漏洞。
更新#2 :从Android 5.0开始,现在不再支持此功能,因为两个应用程序不能都具有相同的<permission>
元素,除非它们由相同的签名密钥签名。
从历史上看,Android自定义权限一团糟,并且依赖于安装顺序,这是众所周知的暴露漏洞。 在API 21之前,有一个令人不安的变通方法,即在您的清单中声明另一个应用程序的自定义权限,授予该权限...但是,自API21以来,只有一个应用程序可以声明自定义权限,并且将阻止安装声明相同权限的另一个应用程序。 替代方案是重新安装需要权限的应用程序,这样系统就会检测到它们,但这不是一个好的用户体验。或者在运
本文向大家介绍Android权限控制之自定义权限,包括了Android权限控制之自定义权限的使用技巧和注意事项,需要的朋友参考一下 天哪,这篇文章终于说道如何自定义权限了,左盼右盼,其实这个自定义权限相当easy。为了方便叙述,我这边会用到两个app作为例子示范。 Permission App: used to define a new permission 这个作为定义权限的App,我称之为Pe
是否卸载现有应用程序? 我尝试在另外5个示例程序上这样做,但所有这些程序都给出了这个错误。有人知道怎么解决这个吗?
昨天,我的应用程序在上运行得很完美,但今天,当我开始使用我的应用程序并运行它时,我却不断收到错误消息 安装失败,出现消息“未能建立会话”。 屏幕: 单击“确定”获得错误消息 会话“app”:安装apk时出错 并且设备中不存在(已卸载)应用程序。请建议我怎么做?
我想看看我的应用程序是否可以在即时应用程序中完成。我的应用程序是基于从我的船上获取NFC发送的温度。 不幸的是,android开发者网站的常见问题表示,只有以下几个权限可用。 https://developer.android.com/topic/instant-apps/faqs.html 这意味着NFC权限是不可能的? 提前感谢您的回答
想制作一个应用程序吗?-这很简单! 想让它在不同版本上工作吗?-学习火箭科学。 已经看到了以下答案和更多,但没有任何帮助: 答案1 答案2 答案3 下面是我的AndroidManifest区块: 以及来自的相关块: 当我第一次在Marshmallow(6.0.1)上安装该应用程序时,安装程序说(类似于)-“它不需要特殊访问(或权限)”。该应用程序也未能超越初始屏幕,而在其他Android版本上,航