如何以编程方式在外部 SD 卡上安装应用程序?

Cac*_*que 3 android package-managers android-install-apk android-external-storage

我目前正在开发一个可用作更新管理器的应用程序。到目前为止,每当我安装或更新任何其他应用程序时,该应用程序都运行良好。所有这些应用程序都安装在 data/app 文件夹中,我使用 android.content.pm.IPackageManager 类和 installpackage() 方法来安装它们。

我正在研究具有内部存储器 (1 GB)、内部 SDCARD (4GB) 和外部 SD 卡 (8GB) 的 Costum ROM。由于我所有的应用程序都安装在 data/app 文件夹中,我的内存空间不足!我想知道是否可以使用相同的 installpackage() 方法在外部 SDCARD(或内部)上安装应用程序。

这是我安装应用程序的方法:

 private Class<?> iPackageManagerStubProxyClass;

  iPackageManagerStubProxyClass = Class
 .forName("android.content.pm.IPackageManager$Stub$Proxy");



  public void installPackage(Uri uri) throws NoSuchMethodException,
  NumberFormatException, IllegalArgumentException, IllegalAccessException,
  InvocationTargetException, ClassNotFoundException {
  Log.i(LOG_TAG, "installing without deleting");
  Method method = getMethod(iPackageManagerStubProxyClass, "installPackage");
  method.invoke(packageManagerServiceProxy, uri, getPackageInstallObserver(),
  Integer.valueOf(INSTALL_REPLACE_EXISTING | INSTALL_INTERNAL), "");
  System.out.println(method);
  }
Run Code Online (Sandbox Code Playgroud)

我开始怀疑我不能在 SD 卡上安装应用程序。有什么建议吗?如果没有,我可以在安装后以编程方式将我的应用程序移动到 SD 卡吗?

Shi*_*a N 5

使用此代码

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        android:installLocation="preferExternal"
        ... >
Run Code Online (Sandbox Code Playgroud)