如何检测谷歌应用商店是否正在下载/安装特定应用程序?

5
许多应用程序提供推荐安装由开发者或开发者合作伙伴制作的其他应用程序。 推荐只是指向Play商店的链接,用户可以从中安装推荐的应用程序。
如果以下情况之一成立,我不想为X应用程序提供推荐:
- 应用程序X已经安装 - 应用程序X正在安装过程中(例如,在Google Play上下载)
检测X是否已安装很容易,但我似乎找不到任何API来读取从Google Play下载/安装状态。 有没有办法检测用户是否正在安装应用程序X?
2个回答

3
有没有办法检测用户是否正在安装X应用程序的过程中? 你能接近这个问题,是通过使用 NotificationListenerService 。 从文档中可以看到: “当新通知被发布或删除时,系统会向服务发送调用。” 但考虑到此服务最近添加到API 18级,并且您的用例,您可能需要考虑使用BroadcastReceiver并侦听何时调用android.intent.action.PACKAGE_ADDEDandroid.intent.action.PACKAGE_REMOVED。这样,一旦安装或卸载应用程序,您就可以对包名称执行所需操作,例如提供到Play商店的链接。 以下是一个示例:
public class PackageChangeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent == null || intent.getData() == null) {
            return;
        }

        final String packageName = intent.getData().getSchemeSpecificPart();
        // Do something with the package name
    }

}

在你的 AndroidManifest 中。
<receiver android:name="your_path_to.PackageChangeReceiver" >
    <intent-filter>
        <action android:name="android.intent.action.PACKAGE_ADDED" />
        <action android:name="android.intent.action.PACKAGE_REMOVED" />

        <data android:scheme="package" />
    </intent-filter>
</receiver>

当安装完成时,将触发此操作:http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_ADDED 我需要知道包下载(安装流程的开始)何时开始。 - UsAaR33
1
@UsAaR33 没错,这也是我最初的建议。没有其他办法可以立刻知道用户何时开始安装一个应用程序。如果您想在您的应用程序中显示朋友应用程序的链接,是否有任何特别的原因不等待几秒钟直到下载和安装完成呢? - adneal
啊,错过了NotificationListener;看起来完美! - UsAaR33
关于你的问题,推荐的应用程序可能是非常大的下载,需要几分钟时间;我想避免推荐用户已经在下载的东西,从而避免尴尬。 - UsAaR33

-1

我知道一种方法可以做到。但是,它需要你从一个URL开始下载。

背后的简单想法是使用

getContentLength()

查看应用程序的内容长度(以字节为单位)。

然后,您可以简单地使用

YouInputStream.read(TheData)

查看下载进度。

实际上,关于如何在ProgressDialog中下载Android文件并显示进度,有一个更详细的答案在这里

顺便说一下,也许你可以获取应用程序正在下载的套接字,然后按照上面的步骤进行操作。不过我没有任何相关经验。


应用商店应用正在下载。我该如何访问它的套接字? - UsAaR33

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接