3

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

我正在开发具有内部存储器 (1 GB)、内部 SDCARD (4GB) 和外部 SD 卡 (8GB) 的 costum ROM。由于我所有的应用程序都已安装在数据/应用程序文件夹中,我的内存空间不足!我想知道是否可以使用相同的 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);
  }

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

4

2 回答 2

5

Use this code

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        android:installLocation="preferExternal"
        ... >
于 2014-11-01T11:41:15.780 回答
3

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

没有办法以编程方式做到这一点!(直到现在Android 7.0)

您必须在AndroidManifest.xml文件中定义属性android:installLocation

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    android:installLocation="preferExternal"
    ... >

指定以下值之一:

“internalOnly” 应用程序必须仅安装在内部设备存储上。如果设置了此项,应用程序将永远不会安装在外部存储上。如果内部存储已满,则系统将不会安装该应用程序。如果您未定义 android:installLocation,这也是默认行为。

"auto" 应用程序可能安装在外置存储上,但系统默认将应用安装到内置存储上。如果内部存储已满,则系统会将其安装到外部存储上。安装后,用户可以通过系统设置将应用程序移动到内部或外部存储。

“preferExternal” 该应用程序更喜欢安装在外部存储(SD 卡)上。无法保证系统会遵守此请求。如果外部媒体不可用或已满,应用程序可能会安装在内部存储上。安装后,用户可以通过系统设置将应用程序移动到内部或外部存储。

更多信息

于 2016-10-15T00:00:40.850 回答