标签: android-package-managers

PackageManager.getInstallerPackageName()能告诉我我的应用是从亚马逊应用商店安装的吗?

我计划在亚马逊应用程序商店和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

18
推荐指数
4
解决办法
9081
查看次数

如何检查是否启用了活动?

背景

我正在尝试检查是否在运行时启用/禁用了活动(或任何其他应用程序组件类型).

问题

可以使用下一个代码:

    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,COM​​PONENT_ENABLED_STATE_DISABLED或COMPONENT_ENABLED_STATE_DEFAULT之一.最后一个意味着组件的启用状态基于清单中的原始信息,如ComponentInfo中所示.

所以它不仅是启用/禁用,还是"默认".

这个问题

如果返回"COMPONENT_ENABLED_STATE_DEFAULT",我如何知道它是默认为启用还是禁用(在运行时)?

这个问题的原因是无论人们放入清单中的内容("启用"属性),代码都应该有效.

是否有可能使用意图解决?

android android-manifest android-package-managers android-activity

18
推荐指数
1
解决办法
3029
查看次数

Android M反射方法freeStorageAndNotify异常

我正在使用反射方法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,但是有很多清洁应用程序只需点击一下即可清除所有设备缓存,所以如果有人知道如何通过另一种解决方法绕过这个问题我我很高兴看到这一点.

非常感谢你的帮助

performance android caching android-package-managers

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

在Android中获取活动的应用程序名称

我正在尝试制作一个显示所有活动应用程序的程序.

我到处搜索,但只能找到只显示包名的代码.

如果您的主人可以告诉我如何显示所有活动的应用程序名称,那将是非常有帮助的

android android-package-managers

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

如何获取用户在Android设备上安装的应用列表?

我目前正在使用以下代码:

List<PackageInfo> packs = getPackageManager().getInstalledPackages(0);
Run Code Online (Sandbox Code Playgroud)

但它会返回由设备制造商和我安装的应用程序.如何限制它以便只返回我安装的应用程序?

android installed-applications android-package-managers android-applicationinfo

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

hasSystemFeature(PackageManager.FEATURE_CAMERA)对于没有摄像头的设备返回true

我有一个应用程序,它使用相机功能,但其部分功能也可以在没有相机功能的情况下运行.所以我把它放在我的清单中.

<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.这有点奇怪还是我错过了什么.

我尝试了不同的东西,甚至在蓝牙功能上尝试了同样的东西,因为平板电脑甚至没有蓝牙功能.它适用于蓝牙,但让我真的适合相机.

android android-package-managers android-camera

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

adb"install"命令和"pm install"命令之间的区别?

使用install命令安装应用程序和使用程序包管理器pm install命令之间的区别是什么?他们做同样的工作吗?一个命令实际上是在后面调用另一个吗?

adb install -r APK_FILE
adb shell pm install APK_FILE
Run Code Online (Sandbox Code Playgroud)

android adb android-package-managers

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

当应用处于"待发布"阶段并由审核人/测试人员(Google Play商店)使用/审核时,InstallerPackageName是什么?

情况

我的应用程序中有一组功能,它们根据安装的商店进行更改.例如,我希望为家庭观众和儿童展示一组更受限制的广告,以便有资格获得该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

14
推荐指数
1
解决办法
745
查看次数

从apk文件获取minSdkVersion和targetSdkVersion

我想获得的价值观minSdkVersion,并targetSdkVersion从存储在设备上的APK.此处讨论了获取其他详细信息,但该类中 仅提供了targetSdkVersionApplicationInfo.minSdkVersion除了解压apk文件并阅读AndroidManifest.xml之外,还能获得吗?

android apk android-package-managers

13
推荐指数
4
解决办法
7361
查看次数

如何获取 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万
查看次数