应用程序特定的哪些因素会阻止移动到外部存储?

6次阅读
没有评论

问题描述

当安装Android应用时,在“App Info”页面中的“移到SD卡”按钮是否可用取决于应用的某些特性。本文讨论的是系统如何检测一个应用是否可以被移动到外部存储,以及相应的按钮为什么会出现或消失。

解决方案

方案1:分析Manifest.xml文件

要确定一个应用程序是否可以在安装后转移至外部存储,请查看该应用的Manifest.xml配置文件。特别是要检查<application>标签下的android:installLocation属性:

&lt;application 
  android:icon="@drawable/app_icon"
  android:label="App Label"  
  android:allowBackup="true"
  android:supportsRtl="true"
  android:installLocation="auto|preferExternal|internalOnly">
    ...
</application>
  • android:installLocation:
  • 默认值为internalOnly,表示应用只能安装在内部存储上。
  • 若设置为auto(或不指定),则由系统根据当前设备环境自动选择最佳的存储选项。
  • preferExternal指定了如果有可能的话应用可以被移动到外部存储。

若此属性值为internalOnly,则表示该应用程序不能被移至SD卡。因此,在“App Info”页面中不会显示“移到SD卡”的按钮。

方案2:程序检测方法

虽然直接从Manifest.xml配置确定可能较为直观明确,但也可通过编程方式检查:

  1. 在应用运行时使用以下代码来查询:
import android.content.pm.ApplicationInfo;
import android.util.Log;

public boolean canMoveToExternalStorage() {
    ApplicationInfo appInfo = getPackageManager().getApplicationInfo(
            packageName, 0);
    return (appInfo.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) != 0;
}
  1. 如果返回true,表示当前的应用支持在安装后移动至外部存储。
    若返回结果为false,则不能移动。

以上两种方法均可以用来判断某一应用是否允许被移至SD卡。如果应用的Manifest未指明installLocation=""字段,则默认采用自动选择的方式;但实际的最终决定权仍然在于系统和其当前对存储媒体的支持情况。

另见

如果有更具体的情况或者遇到相似问题,可以参考已有的相关讨论:
如何在安装之前确定一个应用能否移到SD卡?
通过阅读上述链接可获取更多细节和具体解决方案,如通过查阅文档developer.android.com/guide/topics/data/install-location.html

正文完