Mik*_*ike 8 android android-contentresolver
我的应用程序设置为在打开扩展名为.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>
Run Code Online (Sandbox Code Playgroud)
我打开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();
}
}
Run Code Online (Sandbox Code Playgroud)
当这段代码运行时(在我从Chrome打开文件后),uri就是内容:// downloads/my_downloads/1602,cursor.moveToFirst()返回false
然后我退出我的应用程序并转到下载应用程序并打开完全相同的文件.这会触发我的应用程序打开,运行相同的代码除了使用uri 内容:// downloads/all_downloads/1602(uri中的其他内容完全相同),cursor.moveToFirst()调用返回true并返回cursor.getString ()方法返回"file123.myappdata"(这正是我想要的).
当我从Chrome打开下载的文件(在uri中给我"my_downloads")而不是从下载中打开相同的下载文件(在uri中给我"all_downloads")时,为什么cursor.moveToFirst()方法找不到任何数据?