强制Android应用程序在安装完成时打开

时间:2016-01-10 13:39:42

标签: android actionview android-install-apk android-os-handler

我正在运行一个Android应用程序,成为在系统上运行的唯一应用程序,所以,当启动完成后,我启动应用程序并阻止用户因任何原因退出它(这使我禁用了两个导航状态栏)。

然后,为了实现对应用程序的更新,我查看是否有新的应用程序,如果有,我运行后台任务以使用jsch从sftp服务器下载新更新,并且应用程序完成下载,我使用ACTION_VIEW意图安装apk:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/update_app.apk")), "application/vnd.android.package-archive");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

这里的问题是安装完成后,会出现默认的android屏幕:

enter image description here

这使用户可以选择完成 || 打开,并确保用户选择完成会导致关闭窗口并且应用程序在更新时已经关闭,因此用户需要系统用户界面根本不受欢迎。

请记住,我无法以编程方式打开应用程序,因为安装更新时卸载旧版本,所以我要做两个选项之一,我不知道如何实现任何:< / p>

  1. 安装完成后,默认情况下强制应用程序打开。

  2. 更改系统安装完成屏幕或覆盖其按钮操作。

2 个答案:

答案 0 :(得分:1)

我终于解决了这个问题,我在一个应用程序中使用了以下接收器:

    <receiver
        android:name="com.example.extraApp.InstallReceiver"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.PACKAGE_INSTALL" />
            <action android:name="android.intent.action.PACKAGE_ADDED" />
            <data android:scheme="package"/>
        </intent-filter>
    </receiver>

这个应用程序一直在运行,它只包含接收器,触发后(当原始应用程序更新时),我使用包名称启动原始应用程序:

public class InstallReceiver extends BroadcastReceiver{    
    @Override
    public void onReceive(Context context, Intent intent) {
        try {
            Intent new_intent = context.getPackageManager().getLaunchIntentForPackage("com.example.updaterjschtest");
            context.startActivity(new_intent);
        } catch (Exception e) {
            e.printStackTrace();
        }   
    }
}

关于为什么我使用另一个应用程序作为听众,这是因为BroadcastReceiver will never work unless the app is launched at least once,它在更新后不能直接通过原始应用程序使用。

答案 1 :(得分:0)

我会建议install_referrerreference

与此answer一样,我认为在onReceive中您可以执行所需的每个代码,例如启动您的活动。

我从未使用或测试过这种方法,但它应该是可行的。