0

ダウンロード マネージャーから、更新された APK をダウンロードできます。ダウンロードに成功すると、Install または Cancel のインストール POP UP が表示されます。INSTALL を要求せずに APK をインストールする方法はありますか。POPUPの外側をクリックすると、POPUPが消えたからです。

 Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.fromFile(new File(path)),
                "application/vnd.android.package-archive");

        intent.setAction(Intent.ACTION_INSTALL_PACKAGE);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); 
4

5 に答える 5

1

一般に、デバイスがルート化されているか、システム ファームウェアの署名が必要です。

アプリでApplicationManagerとのコピーを作成できます。OnInstalledPackaged

これを使用して、次のようなものを実行できます。

public static void installApp(Context context, File path, OnInstalledPackaged callback) {
    try {
        final ApplicationManager am = new ApplicationManager(context);
        if(callback != null) am.setOnInstalledPackaged(callback);
        am.installPackage(path);
    } catch (Exception e) {
        if(Utils.LOGGING) Utils.log("E::"+e.toString());
    }
}
于 2015-04-23T13:39:59.997 に答える
0

いいえ、これはセキュリティ上の理由からできません。インストールを開始できますが、決定するのはユーザー次第です。

ただし、電話がルート化されている場合は、プログラムでこれを行う方法がありますが、これはほとんどのアプリのオプションではありません. コードは次のようになります。

public ApplicationManager(Context context) throws SecurityException, NoSuchMethodException {

    observer = new PackageInstallObserver();
    pm = context.getPackageManager();

    Class<?>[] types = new Class[] {Uri.class, IPackageInstallObserver.class, int.class, String.class};
    Class<?>[] uninstalltypes = new Class[] {String.class, IPackageInstallObserver.class, int.class};
    method = pm.getClass().getMethod("installPackage", types);
    uninstallmethod = pm.getClass().getMethod("deletePackage", uninstalltypes);
}


public void uninstallPackage(String packagename) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
        uninstallmethod.invoke(pm, new Object[] {packagename, observer, 0});
}
public void installPackage(Uri apkFile) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
        method.invoke(pm, new Object[] {apkFile, observer, INSTALL_REPLACE_EXISTING, null});
}

詳細はこちら:

APK をプログラムでインストール/アンインストールする (PackageManager と Intents)

https://paulononaka.wordpress.com/2011/07/02/how-to-install-a-application-in-background-on-android/

于 2015-04-23T13:35:03.287 に答える