私のアプリにはシステム権限があります。ファームウェア内にあり、現在は/ system/appにあります
この投稿でアプリをサイレントインストールできました
プログラムでAPKをインストール/アンインストールする(PackageManagerとIntents)
動作するサンプルアプリ
http://paulononaka.wordpress.com/2011/07/02/how-to-install-a-application-in-background-on-android/
しかし、それでも同じ方法でアプリをアンインストールすることはできません。インストール例のようにリフレクションを使ってみました。
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});
}
UninstallPackageメソッドを追加し、ApplicationManagerメソッドを編集しました。まだこれを機能させることはできません。
それを実行すると、メソッドが見つかりません(invoke "deletePackage"行)。
これは私の変更で動作していないプロジェクトです: https ://dl.dropbox.com/u/1928109/InstallInBackgroundSample.zip
関数の説明は次のとおりです。http : //www.androidjavadoc.com/1.0_r1_src/android/content/pm/PackageManager.html#deletePackage(java.lang.String、android.content.pm.IPackageDeleteObserver、int)
パラメータは大丈夫です。InstallPackageObserverの代わりにDeletePackageObserverクラスを指定する必要があるようです。しかし、私はそれを行う方法がわかりません(私はそのようなクラスを持っていません)。
ありがとう