我计划在亚马逊应用程序商店和Google Play上发布我的应用程序,并且我的应用程序中的一些内容需要根据应用程序是否从Amazon应用商店安装而略有不同.如果我PackageManager.getInstallerPackageName(String packageName)正确理解了该方法,它会告诉我安装我的应用程序的应用程序的名称.对?如果是这样,有人知道如果我的应用程序是从亚马逊应用程序商店安装的,那么此方法返回的值是多少?如果没有,有没有人知道我可以用来确定我的应用程序是否是从亚马逊应用程序商店安装的任何其他方法?
注意:我知道有关Stack Overflow的其他问题已被回答,这些问题暗指
PackageManager.getInstallerPackageName(String packageName)用于确定安装我的应用程序的应用程序的名称.但是,搜索Stack Overflow和其他地方,我无法确定从Amazon应用商店安装应用程序时返回 的值PackageManager.getInstallerPackageName(String packageName).
android amazon android-package-managers amazon-appstore google-play
我正在尝试检查是否在运行时启用/禁用了活动(或任何其他应用程序组件类型).
可以使用下一个代码:
final ComponentName componentName = new ComponentName(context, activityClass);
final PackageManager pm = context.getPackageManager();
final int result = pm.getComponentEnabledSetting(componentName);
Run Code Online (Sandbox Code Playgroud)
但是返回的结果,如文档中所写:
返回组件的当前启用状态.可以是COMPONENT_ENABLED_STATE_ENABLED,COMPONENT_ENABLED_STATE_DISABLED或COMPONENT_ENABLED_STATE_DEFAULT之一.最后一个意味着组件的启用状态基于清单中的原始信息,如ComponentInfo中所示.
所以它不仅是启用/禁用,还是"默认".
如果返回"COMPONENT_ENABLED_STATE_DEFAULT",我如何知道它是默认为启用还是禁用(在运行时)?
这个问题的原因是无论人们放入清单中的内容("启用"属性),代码都应该有效.
是否有可能使用意图解决?
android android-manifest android-package-managers android-activity
我正在使用反射方法freeStorageAndNotify:
Method freeStorageAndNotify = null;
freeStorageAndNotify = service.packageManager.getClass().getMethod(
"freeStorageAndNotify", long.class, IPackageDataObserver.class);
freeStorageAndNotify.invoke(PackageManager.class, maxCache + freeSpace, packageDataObserver);
Run Code Online (Sandbox Code Playgroud)
这会导致InvocationTargetException:
java.lang.SecurityException: Neither user 10199 nor current process has android.permission.CLEAR_APP_CACHE.
Run Code Online (Sandbox Code Playgroud)
一些要点: - 我已经有android.permission.CLEAR_APP_CACHE - 这只发生在android"M"版本中(从开发者网站闪烁预览sdk)
我知道这是一个黑客攻击,谷歌没有为此提供一些官方API,但是有很多清洁应用程序只需点击一下即可清除所有设备缓存,所以如果有人知道如何通过另一种解决方法绕过这个问题我我很高兴看到这一点.
非常感谢你的帮助
我正在尝试制作一个显示所有活动应用程序的程序.
我到处搜索,但只能找到只显示包名的代码.
如果您的主人可以告诉我如何显示所有活动的应用程序名称,那将是非常有帮助的
我目前正在使用以下代码:
List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);
Run Code Online (Sandbox Code Playgroud)
但它会返回由设备制造商和我安装的应用程序.如何限制它以便只返回我安装的应用程序?
android installed-applications android-package-managers android-applicationinfo
我有一个应用程序,它使用相机功能,但其部分功能也可以在没有相机功能的情况下运行.所以我把它放在我的清单中.
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="false"/>
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我检查设备是否有相机使用它
final boolean deviceHasCameraFlag = pm.hasSystemFeature(PackageManager.FEATURE_CAMERA);
Run Code Online (Sandbox Code Playgroud)
现在我在运行Android 4.0(ICS)且没有摄像头的平板电脑上测试我的代码.但我仍然得到真正的价值deviceHasCameraFlag.这有点奇怪还是我错过了什么.
我尝试了不同的东西,甚至在蓝牙功能上尝试了同样的东西,因为平板电脑甚至没有蓝牙功能.它适用于蓝牙,但让我真的适合相机.
使用install命令安装应用程序和使用程序包管理器pm install命令之间的区别是什么?他们做同样的工作吗?一个命令实际上是在后面调用另一个吗?
adb install -r APK_FILE
adb shell pm install APK_FILE
Run Code Online (Sandbox Code Playgroud) 情况
我的应用程序中有一组功能,它们根据安装的商店进行更改.例如,我希望为家庭观众和儿童展示一组更受限制的广告,以便有资格获得该Google Play for Education类别.在其他商店,我仍然想限制,但不希望像过滤广告一样严格.
我最后的一般观察是,如果我选择加入"Google Play for Education"类别,则需要花费几个小时才能发布,因为以下内容(如开发者控制台所述):
选中此框会提交此应用,以便包含在Google Play for Education的"教育工作者推荐"部分中.关于推荐哪些应用程序的最终决定是由第三方教师网络完成的.如果您的应用被选中,我们将通过电子邮件通知您.如果没有,您的应用仍可在Google Play for Education中搜索.
现在,在应用程序在此类别中发布教师网络之前,我假设,下载并测试/验证是否符合指南且没有违规.
问题
为了区分我安装的商店我显然使用这个:
PackageManager packageManager = context.getPackageManager();
String installer = packageManager.getInstallerPackageName(packageName);
if (installer == null) installer = ""; //to avoid NPE
if (installer.equals("com.android.vending")) {
//It is installed from Google Play store
//PROBLEM: THIS DOES NOT SEEM TO BE THE PACKAGE NAME RETURNED
//WHEN GOOGLE PLAY REVIEWERS/TESTERS ARE USING THE APP
}
else ...
....
....
//similarly handling other …Run Code Online (Sandbox Code Playgroud) android publishing admob android-package-managers google-play
我想获得的价值观minSdkVersion,并targetSdkVersion从存储在设备上的APK.此处讨论了获取其他详细信息,但该类中
仅提供了targetSdkVersionApplicationInfo.minSdkVersion除了解压apk文件并阅读AndroidManifest.xml之外,还能获得吗?
开发者网站上描述了这一行,但我没有完全理解它
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
android ×10
google-play ×2
adb ×1
admob ×1
amazon ×1
android-11 ×1
apk ×1
caching ×1
performance ×1
publishing ×1