外部ストレージ領域にあるファイルの存在をテストする必要がある BroadcastReceiver (Android 4.1) があります。受信者はファイルを読み書きする必要はありません。その存在をテストするだけです。
BroadcastReceivers が外部ファイルにアクセスできないことを示す Android ドキュメントには何も見つかりませんでしたが、以下のコードは常に false を返します。
logcat の出力は、getExternalStorageState() が「mounted」を返すことを示しており、Receiver ではなく、通常のアプリを使用してファイルにアクセスできます。例外はスローされません。
public class FileCheckReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
boolean b = checkFile();
Log.d(TAG, "FileCheckReceiver: " + b);
}
boolean checkFile() {
String state = Environment.getExternalStorageState();
Log.d(TAG, "FileCheckReceiver, Environment.getExternalStorageState: " + state);
String name = "file.txt";
File f = new File(Environment.getExternalStorageDirectory() + "/" + name);
try
{
if (f.exists()) {
System.out.println(f.getCanonicalPath().toString());
return true;
}
}catch(Exception e) {
e.printStackTrace();
}
return false;
}
}
BroadcastReceivers はファイルへのアクセスを停止していますか?