我正在开发一个可用作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卡吗?
答案 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。