我想启动一个服务,扫描特定目录中的子目录和文件。这就是我在MainActivity的onCreate方法中启动服务的方法(我仅将FAB用于测试目的):
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(getApplicationContext(), AudioBookLibraryScannerService.class);
intent.putExtra(AudioBookLibraryScannerService.ROOT_DIR, rootDir);
getApplicationContext().startService(intent);
}
});
rootDir定义为:
private File extStore = Environment.getExternalStorageDirectory();
private String rootDir = extStore.getAbsolutePath() + "/aubop/";
我也在AndroidManifest.xml中设置了权限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
在AudioBookLibraryScannerService类中,我将传递的rootDir作为文件读取:
public static final String ROOT_DIR = "rootDir";
private File rootDir;
[...]
@Override
public void onHandleIntent(Intent intent)
{
[...]
String rootDirPath = intent.getStringExtra(ROOT_DIR);
rootDir = new File(rootDirPath);
Log.e(TAG, rootDirPath.getAbsolutePath());
if(rootDir.canRead()) {
Log.e(TAG, "canRead");
}
[...]
}
永远不会追踪值“canRead”,但是跟踪的绝对路径是正确的。 我还使用文件管理器检查了目录的权限。权限设置为771,UID为“root”,GID为“everybody”。我使用文件浏览器在SD卡上创建了目录,然后使用相同的文件浏览器将文件从网络驱动器复制到目录中。
为什么目录不可读的任何想法?以及哪个用户是我的应用程序运行?看起来“其他”的权限(“771”中的“1”)适用于我的应用,但我不知道为什么。
谢谢!