我的应用设置为在打开扩展名为 .myappdata 的文件后激活。它通过这个intent-filter完成了这个:
<activity
android:name="com.myapp.ExamineFileActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.BROWSABLE"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="file" android:pathPattern=".*\\.myappdata" android:mimeType="*/*"/>
<data android:scheme="content" android:pathPattern=".*\\.myappdata" android:mimeType="*/*"/>
</intent-filter>
</activity>
我打开Chrome网络浏览器(在运行Android 6.0.1的Nexus 7上),然后转到下载名为“file123.myappdata”的文件的网站,然后点击Chrome中的“打开”链接。
该操作会触发我的应用程序打开并运行此代码,这将获取已下载的文件名:
Uri uri = this.getIntent().getData();
if (uri.getScheme().equals("content")) {
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
try {
if (cursor != null && cursor.moveToFirst()) {
return cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));
}
} finally {
cursor.close();
}
}
当此代码运行时(在我从Chrome打开文件后),uri是 content:// downloads / my_downloads / 1602 和 cursor.moveToFirst( )返回 false
然后我退出我的应用程序并转到下载应用程序并打开完全相同的文件。这会触发我的应用程序打开,运行相同的代码,除了使用uri content:// downloads / all_downloads / 1602 (uri中的其他内容完全相同), cursor.moveToFirst()调用返回 true ,而cursor.getString()方法返回“file123.myappdata”(这正是我想要的)。
当我从Chrome打开下载的文件(在uri中给我“my_downloads”)而不是从下载中打开相同的下载文件时,为什么cursor.moveToFirst()方法找不到任何数据(给我“all_downloads”) URI)?