如果SD卡不存在,如何防止安装Android应用程序?

5

我的代码逻辑需要设备中安装SD卡。我已经在应用程序的闪屏界面中添加了此情况的检查,但希望在用户下载/安装应用程序之前通知他们。有没有办法实现这一点?

谢谢!

3个回答

2
无法在应用程序安装之前完成此操作,因为限制此类操作的唯一方法是使用 <uses-feature> 标记。然而,该标记没有存储要求的选项。您可以通过在应用程序描述中显著包含此信息来提醒用户。

另一方面,我见过的每个设备都有某种形式的外部存储,无论是SD卡还是作为外部存储挂载的内置存储器。通过使用启动画面检查外部存储器是完成此操作的最佳方法,因为没有其他选择。


这是一个好方法。+1 但我的问题是,即使SD卡存在并且应用程序安装在SD卡中,用户是否可以手动将应用程序移动到内部存储器中?我想知道是否有一种方法可以阻止它。 - Seshu Vinay
1
是的,用户可以这样做。无法阻止用户将应用程序移动到内部存储。但是,如果您想让某些数据仅保留在SD卡上,请在应用程序第一次运行时下载/创建它到SD卡上。这样,即使用户将应用程序移动到内部存储,数据也将仍然保留在外部存储器上。 - Raghav Sood

0

我认为这是不可能的。在启动画面上检查SD卡并阻止用户进行下一步处理是正确的解决方案,或者使用android:installLocation将Android应用程序安装在SD卡上。

从API Level 8开始,您可以允许您的应用程序安装在外部存储器(例如设备的SD卡)上。这是一个可选功能,您可以使用android:installLocation清单属性声明您的应用程序。

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

如果您声明“preferExternal”,则请求将应用程序安装在外部存储上,但系统不能保证应用程序将安装在外部存储上。如果外部存储已满,则系统将其安装在内部存储器上。用户还可以在两个位置之间移动您的应用程序。
当您的应用程序安装在外部存储上时:
- 只要外部存储在设备上挂载,应用程序性能不受影响。 - .apk文件保存在外部存储器上,但所有私有用户数据、数据库、优化的.dex文件和提取的本地代码都保存在内部设备存储器上。 - 存储您的应用程序的唯一容器使用随机生成的密钥进行加密,只有最初安装它的设备才能解密。因此,在SD卡上安装的应用程序仅适用于一个设备。 - 用户可以通过系统设置将您的应用程序移动到内部存储器中。 点击此处了解更多详情。

0

这是无法实现的。您的应用程序必须安装后才能检查用户的环境,因此没有其他方法。您可以尝试强制要求将您的应用程序安装在SD卡上,这样如果没有Google Play(未经测试)可能根本不允许应用程序安装,但这并不能解决您的问题,因为用户仍然不知道原因。解决方案是在产品说明中明确说明需要SD卡。但请注意,要求使用SD卡是有风险的,因为许多设备没有SD卡,但仍提供外部存储。我的建议是只需添加有关存储要求的注释,让系统处理即可。


使用 preferExternal 不会阻止您的应用程序被安装在内部存储上,如果外部存储空间不足或目前不可用。 - Raghav Sood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接