Вы можете использовать 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
}
}
Тем не менее, в зависимости от вашей ситуации (независимо от того, есть ли у вас все «носители» заранее или пользователь получает / создает их, когда они используют приложение), вы можете захотеть поместить их на внешнее хранилище независимо от того. Многие пользователи недовольны большим внутренним приложением (и большое количество внутренних носителей сделало бы его огромным).