Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检测是否安装了其他特定应用程序?_Java_Android - Fatal编程技术网

Java 如何检测是否安装了其他特定应用程序?

Java 如何检测是否安装了其他特定应用程序?,java,android,Java,Android,我有一个应用程序,有两个不同的版本(两个不同的包名)。一个是免费版本,另一个是付费版本。显然,免费版本总是在付费版本之前安装 我希望免费版本能够检测何时安装付费版本。我无法使用带有操作的广播接收器。添加了包,因为这在清单中不再允许,这意味着它不能在后台运行,它只能在应用程序打开时运行。您无法检测到另一个应用程序的安装是否存在明显的隐私问题,但是,您可以检查应用程序是否已安装在设备中并可以打开它 要检查设备中是否安装了应用程序,请使用asgetPackageInfo(“com.app.yourAp

我有一个应用程序,有两个不同的版本(两个不同的包名)。一个是免费版本,另一个是付费版本。显然,免费版本总是在付费版本之前安装


我希望免费版本能够检测何时安装付费版本。我无法使用带有
操作的广播接收器。添加了包
,因为这在清单中不再允许,这意味着它不能在后台运行,它只能在应用程序打开时运行。

您无法检测到另一个应用程序的安装是否存在明显的隐私问题,但是,您可以检查应用程序是否已安装在设备中并可以打开它

要检查设备中是否安装了应用程序,请使用as
getPackageInfo(“com.app.yourAppName”,0)
。如果设备中安装了此类应用程序,则返回信息;如果未安装应用程序,则抛出
NameNotFoundException
。检查以下代码:

Boolean isappInstalled() {
    try {
        pm.getPackageInfo("com.app.yourApp", 0);
        return true;
    } catch (PackageManager.NameNotFoundException e) {
        return false;
    }
}

在启动程序活动的
onCreate()
onStart()
onResume()
中调用此函数,并执行您想对其执行的操作。

但是,我必须在后台连续运行服务,以检查包名是否正确exists@purchaseTest无论你要在免费应用程序上执行什么功能,当应用程序以任何方式打开时,你都会这样做,因此为什么不在免费应用程序打开时才检查付费应用程序的存在呢。或者,将其置于
onCreate()
,这样它只会在应用程序打开时检查它,或者将其置于
onResume()
中,甚至在应用程序最小化并切换回时也会检查它。不要使用服务,并不断检查它,糟糕的用户体验,糟糕的性能和无用的。通过服务检查没有任何意义。我需要在不打开免费应用的情况下检查付费应用是否存在,因为当用户安装付费应用时,他们没有理由再次打开免费应用。事实上,他们会很快卸载它。如果是这样,为什么不把逻辑放进付费应用而不是免费应用?因为我需要免费应用的SharedReference在付费应用第一次打开之前传输到付费应用。