所以,我希望我的应用程序能够上传用户与之共享的文件。我通过file:// urls处理从我的各种文件浏览器共享的文件,然后通过content:// URL处理从Gallery共享的内容。一切都很好,除了我随机决定从DownloadManager测试共享。
以下是代码:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if(intent.getAction() == Intent.ACTION_SEND) {
Uri fileUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
if(fileUri != null) {
if(fileUri.getScheme().equals("content")) {
try {
Uri data = intent.getData();
InputStream input = getContentResolver().openInputStream(fileUri);
//Do something with InputStream
} catch(Exception e) {
//Log exception/show error
}
}
}
}
}
但是,每当我尝试将Uri“数据”传递给openInputStream时,我得到一个NullPointerException,因为getData()返回null,即使我在这个主题上看到的其他问题都说使用了getData()。
当我尝试将“fileUri”传递给openInputStream时,正如我在代码中所做的那样,我得到了安全性异常:
06-20 12:41:24.310: E/AndroidRuntime(12375): java.lang.SecurityException: Permission Denial: reading com.android.providers.downloads.DownloadProvider uri content://downloads/all_downloads/433 from pid=12375, uid=10212 requires android.permission.ACCESS_ALL_DOWNLOADS, or grantUriPermission()
我已尝试添加此权限,但我知道任何应用都无法使用该权限。
所以,我不知道如何尝试从Intent中提取文件数据,希望有一些我不知道的东西。