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

时间:2013-10-22 22:05:32

标签: android package-managers android-install-apk android-external-storage

我正在开发一个可用作Update Manager的应用程序。到目前为止,只要我安装或更新任何其他应用程序,该应用程所有这些应用程序都已安装在data / app文件夹中,我已经使用android.content.pm.IPackageManager类和installpackage()方法来安装它们。

我正在使用具有内部存储器(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);
  }

我开始怀疑我无法在SD卡上安装应用程序。任何sugestions?如果没有,我可以在安装后以编程方式将我的应用程序移动到SD卡吗?

2 个答案:

答案 0 :(得分:4)

使用此代码

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

答案 1 :(得分:2)

  

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

无法以编程方式执行此操作!(直到现在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卡)。无法保证系统会   尊重这一要求。应用程序可能安装在内部   如果外部媒体不可用或已满,则存储。安装完毕后   用户可以将应用程序移动到内部或外部   通过系统设置存储。

更多information