-3

Google PlayStore のようにユーザープロンプトなしで apk ファイルをインストールする必要があります。この質問が何度も寄せられていることは知っていますが、それでも解決可能な答えは見つかりませんでした。SDカードからアプリをインストールしているだけで、次の方法を試しましたが、

public void getInstall(Context context) {


        File file = new File(Environment.getExternalStorageDirectory()
                + "/Demo.apk");
        Uri mPackageURI = Uri.fromFile(file);

        ApplicationManager appMgr = null;

        try {
            appMgr = new ApplicationManager(context);
        } catch (SecurityException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (NoSuchMethodException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        int installFlags = 1;
        PackageManager pm = context.getPackageManager();

        Method method = null;

        try {
            method = pm.getClass().getMethod(
                    "installPackage",
                    new Class[] { android.net.Uri.class,
                            android.content.pm.IPackageInstallObserver.class,
                            Integer.TYPE, String.class });
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        String installerPackageName = "com.myapp.demo";
        PackageInstallObserver observer = appMgr.new PackageInstallObserver();

        try {

            method.invoke(pm, new Object[] { mPackageURI, observer,
                    installFlags, installerPackageName });

        } catch (IllegalArgumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

Neither user 10057 nor current process has android.permission.INSTALL_PACKAGESしかし、マニフェスト ファイルにこのアクセス許可を追加したにもかかわらず、エラーが発生します。

私のデバイスはルート化されていないので、ルート化せずにやりたいです。多くの回答で、許可されていないセキュリティ上の理由により不可能であることがわかりましたが、PlayStoreとAndroidLostアプリで可能であれば、なぜ私たちと一緒にしないのですか?

可能であれば助けが必要です!

ありがとうございました、

4

1 に答える 1

7

私のデバイスはルート化されていないので、ルート化せずにやりたい

これはサードパーティ製アプリの Android では不可能です。/system/appGoogle Play はではなく にインストールされているため、それが可能です/data/app。OEM または ROM メーカーにアプリをシステム パーティションに配置するよう説得できる場合は、INSTALL_PACKAGESシステム アプリにのみ付与されるアクセス許可を利用できます。

いずれにせよ、これは Android のアンチ パターンです。ユーザーの同意なしに勝手にアプリをインストールできるようになれば、重大なセキュリティ ホールとなり、ユーザーはデバイスを管理できなくなります。

于 2013-04-15T11:14:34.360 に答える