我的应用程序设置为激活一次具有扩展名的文件.myappdata被打开。它通过这个意图过滤器来实现这一点:
<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 Web 浏览器(在运行 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 是内容://下载/我的下载/1602 and 光标.moveToFirst()回报false
然后我退出应用程序并转到“下载”应用程序并打开完全相同的文件。这会触发我的应用程序打开,运行相同的代码,除了 uri内容://下载/所有下载/1602(uri 中的其他所有内容都完全相同)光标.moveToFirst()来电返回true并且cursor.getString()方法返回“file123.myappdata”(这正是我想要的)。
为什么当我从 Chrome 打开下载的文件(在 uri 中提供“my_downloads”)与从下载中打开相同的下载文件(在 uri 中提供“all_downloads”)时,cursor.moveToFirst() 方法找不到任何数据?