我正在编写一个存储大量媒体文件的android应用。它们不是使用户通知或其他媒体目录困惑的类型(并且太多),但是它们也必须是用户可更新的,因此我不能将它们放在资源中。我可以使用getExternalFilesDir在sdcard上获取路径,但是我只想在sdcard上安装了应用程序本身的情况下执行此操作。如果该应用程序是内部安装的,我想将媒体放入内部存储器。

那么,如何确定我的应用程序是在内部还是外部存储器中运行?

最佳答案

您可以使用PackageManager来获取ApplicationInfo,然后从中检查FLAG_EXTERNAL_STORAGE的“标志”。

这是我演示的一个简单示例:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    PackageManager pm = getPackageManager();
    try {
       PackageInfo pi = pm.getPackageInfo("com.totsp.helloworld", 0);
       ApplicationInfo ai = pi.applicationInfo;
       // this only works on API level 8 and higher (check that first)
       Toast
                .makeText(
                         this,
                         "Value of FLAG_EXTERNAL_STORAGE:"
                                  + ((ai.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) == ApplicationInfo.FLAG_EXTERNAL_STORAGE),
                         Toast.LENGTH_LONG).show();
    } catch (NameNotFoundException e) {
       // do something
    }
}

不过,根据您的情况(您是否预先拥有所有“媒体”,还是用户在使用应用程序时获取/创建它),无论如何,您可能都希望将其放置在外部存储中。大型内部应用程序被许多用户所反对(很多内部媒体可能会使其变得庞大)。

10-08 01:29