我用这个意图让用户选择一张照片:
Intent intent = new Intent(Intent.ACTION_PICK,
MediaStore.Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(intent, INTENT_SELECT_PHOTO);
Run Code Online (Sandbox Code Playgroud)
并在onActivityResult:
Uri uri = data.getData();
InputStream inputStream = getContentResolver().openInputStream(uri);
Run Code Online (Sandbox Code Playgroud)
但它会引发FileNotFoundException一些Android设备.
价值uri:
content://media/external/images/media/26467
Run Code Online (Sandbox Code Playgroud)
引发的异常:
java.io.FileNotFoundException: No such file or directory
Run Code Online (Sandbox Code Playgroud)
并且非常奇怪的是它不会在其他一些Android设备上抛出此异常.什么会导致此错误以及如何解决?
我一直在研究一个设置为打开具有特定扩展名的文件的应用程序.它可以在Gmail上运行一段时间(有些文件打开,有些则没有),我可以从文件资源管理器打开一个文件.
我无法打开手机上的电子邮件应用程序中的文件,但正如我所说,有些文件无法使用我的应用程序从Gmail应用程序打开,有些文件也是如此!
这是我的代码.
<intent-filter > <!-- Solution from @richardlegget on this question http://stackoverflow.com/questions/8148629/intent-filter-to-download-attachment-from-gmail-apps-on-android -->
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/octet-stream" android:pathPattern=".*\\.myextension" />
</intent-filter>
<intent-filter >
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="*/*" android:scheme="file" android:host="*" android:pathPattern=".*\\.myextension" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
我的问题
是否有一组一套意图过滤器,可以从Android设备上的任何位置向包含所需文件扩展名的任何文件注册特定活动?
在我们的应用程序中,我们需要从电子邮件客户端读取附件并将其上载到服务器.对于默认的android电子邮件客户端一切正常,但面向gmail应用程序
java.lang.SecurityException: Permission Denial: opening provider com.google.android.gm.provider.MailProvider from ProcessRecord (pid=11298, uid=10068) requires com.google.android.gm.permission.READ_GMAIL or com.google.android.gm.permission.WRITE_GMAIL
Run Code Online (Sandbox Code Playgroud)
甚至尝试过授予Gmail读写权限但无效.
观察是
它适用于Nexus,但对于三星设备4.2和4.1,如果第一次创建活动,最初工作正常,但如果活动在背景中抛出上述异常.
尝试使用下面的代码获取附件文件名.
Cursor cursor = getContentResolver().query(openIntent.getData(),
new String[] { MediaStore.MediaColumns.DISPLAY_NAME }, null,
null, null);
cursor.moveToFirst();
int nameIndex = cursor
.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME);
if (nameIndex >= 0) {
NCUtil.clickedImageTitle = cursor.getString(nameIndex);
path = cursor.getString(nameIndex);
}
cursor.close();
Run Code Online (Sandbox Code Playgroud)
我的清单文件
<activity
android:name="com.ncomputing.vspacemobile.NCMainActivity"
android:configChanges="orientation|keyboard|keyboardHidden|screenSize"
android:excludeFromRecents="true"
android:launchMode="singleTask"
android:screenOrientation="sensorPortait"
android:theme="@android:style/Theme.NoTitleBar"
android:windowSoftInputMode="adjustPan" >
<!-- For email attachments -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="application/pdf" />
<data android:mimeType="application/msword" />
<data android:mimeType="application/vnd.openxmlformats-officedocument.wordprocessingml.document" …Run Code Online (Sandbox Code Playgroud)