【问题标题】:Android - Install Application programmatically with resultAndroid - 以编程方式安装应用程序并显示结果
【发布时间】:2014-06-26 22:20:26
【问题描述】:

我是 Android 新手,我有一个包含在服务中的应用程序,并且在某些时候该服务需要安装一个新的 .apk(基本上是自动更新),目前安装就像下面的代码一样完成不允许知道它何时完成或从中获得结果,我需要知道这一点才能执行基于该结果的其他操作。

File mFile = new File(Uri.parse(downloadedPackageUriString).getPath());
Intent promptInstall = new Intent(Intent.ACTION_VIEW)
        .setDataAndType(Uri.fromFile(mFile), "application/vnd.android.package-archive")
        .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
appContext.startActivity(promptInstall);

我想知道是否有办法做到这一点? 提前谢谢你。

【问题讨论】:

  • 看看这个:stackoverflow.com/questions/4604239/… 有帮助吗?
  • 我确实已经看到了这一点,他们以相同的方式执行此操作,将 FLAG_ACTIVITY_NEW_TASK 设置在意图上,该意图本身不允许返回结果并立即返回 -1。

标签: java android


【解决方案1】:

逻辑可能是:

  1. 安装脚本
  2. 等待 5 秒
  3. 运行appInstalledOrNot函数
  4. 如果未安装,请在 1 秒后重试

这里可能是代码:

public void installApp(){
    File mFile = new File(Uri.parse(downloadedPackageUriString).getPath());
    Intent promptInstall = new Intent(Intent.ACTION_VIEW)
            .setDataAndType(Uri.fromFile(mFile), "application/vnd.android.package-archive")
            .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    appContext.startActivity(promptInstall);

    Thread t = new Thread(){
        public void run(){

            boolean installed = checkInstalled("vnd.android.package-archive");
            while(!installed)
            {
                System.out.println("Not Installed Yet..Waiting 1 Second");
                t.sleep(1000);
            }

            //Now it has been installed
            if(installed) {
                //This intent will help you to launch if the package is already installed
                Intent LaunchIntent = getPackageManager()
                    .getLaunchIntentForPackage("com.Ch.Example.pack");
                startActivity(LaunchIntent);

                System.out.println("App already installed on your phone");        
            }
            else {
                System.out.println("App is not installed on your phone");
            }
            }
    t.start();
}

private boolean checkInstalled(String uri) {
    PackageManager pm = getPackageManager();
    boolean app_installed = false;
    try {
        pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
        app_installed = true;
    }
    catch (PackageManager.NameNotFoundException e) {
        app_installed = false;
    }
    return app_installed ;
}

代码基于:How to check programmatically if an application is installed or not in Android?

【讨论】:

  • 是的,我正在尝试,谢谢您的回答。我只是想知道如何使它工作,因为我所有的东西都已经发生在一个新的线程 run() 中,我试图将两者结合起来,而且我想避免使用 thread.sleep()。
  • 线程上唯一运行的是while循环,所以你的应用程序的其余部分不应该不受影响吗?
  • 是的,这是一个公平的观点,我会做一些实验和测试,看看会发生什么。
猜你喜欢
  • 2012-06-23
  • 1970-01-01
  • 2011-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多