编程的android更新的APK,并查看安装的结果(android programmatically

2019-09-03 10:17发布

我正在写我的应用程序的应用程序更新。 我要确保我有我的设备上的APK后,这是我从应用程序我试图更新中做到:

Intent promptInstall = new Intent(Intent.ACTION_VIEW);
File f = new File(apkLocation);    
promptInstall.setDataAndType(Uri.fromFile(f), "application/vnd.android.package-archive");
_context.startActivity(promptInstall);

这将启动安装程序我这显示应用程序的权限,我可以点击“安装”。 但是,从这里应用程序直接关闭,我没有得到任何消息,任何(我会一直期待的对话框,告诉我安装成功,给我按“关闭”或“打开”选项)。 它只是在设备的主屏幕,恕不另行通知。

在一个侧面说明,应用程序确实更新时,我手动打开它回来。 我怎样才能让安装程序走,一路如预期? 有什么对意图设置?

虽然写这个,我想知道,如果发生这种情况的原因是,目前的应用程序是简单地覆盖在设备上从而关闭它和程度没有得到意图的结果,因为它的源代码被打死?

Answer 1:

所有你能做的就是注册的意图过滤器就像一个接收器android.intent.action.PACKAGE_INSTALLandroid.intent.action.PACKAGE_REPLACED从中可以再次重新启动应用程序。

<receiver android:enabled="true" android:exported="true" android:label="BootService" android:name="com.project.services.BootService">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED"/>
            <data android:scheme="package"/>
        </intent-filter>
         <intent-filter>
            <action android:name="android.intent.action.PACKAGE_ADDED"/>
            <data android:scheme="package"/>
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.PACKAGE_INSTALL"/>
            <data android:scheme="package"/>
        </intent-filter>
         <intent-filter>
            <action android:name="android.intent.action.PACKAGE_CHANGED"/>
            <data android:scheme="package"/>
        </intent-filter>
         <intent-filter>
            <action android:name="android.intent.action.PACKAGE_REPLACED"/>
            <data android:scheme="package"/>
        </intent-filter>
    </receiver>
</application>

public class BootService extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {

    if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)) {
        Intent serviceIntent = new Intent();
        serviceIntent.setClass(context,Controller.class);
        serviceIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(serviceIntent);
    } else if (intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED)) {
        Intent serviceIntent = new Intent();
        serviceIntent.setClass(context, Controller.class);
        serviceIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(serviceIntent);
    }
  }
}


Answer 2:

要成功地更新您需要启动意图与URI指示您的更新应用为新的任务。

 final Intent intent = new Intent(Intent.ACTION_VIEW);
 intent.setDataAndType(Uri.fromFile(new File(PATH_TO_APK));
 "application/vnd.android.package-archive");
 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 startActivity(intent);

我的帖子下面:

Android应用程序的更新问题



Answer 3:

首先,你不能在安装时不提示,除非你是植根或具有系统权限。 我不认为你是问这个,但你的段落之一是不明确的。

其次,如果安装运行的应用程序的更新版本,您所看到的行为是正常的:应用程序被强制关闭和更新。 你不能就地升级。 您可以检测在安装的时候被中止,因为活动调用安装程序将会恢复。

为了更新正在运行的应用程序,并保持运行,你需要一个单独的进程(应用程序)来监视安装并重新启动应用程序。



文章来源: android programmatically update apk and see the result of the installation