Android:从OneDrive打开文件会导致FileNotFound EACCESS Permission Denied错误

时间:2015-12-08 12:26:03

标签: android onedrive

让用户尝试通过OneDrive app从我的应用中打开文件。似乎所有东西都被扔掉了#34;打开失败:EACCES(权限被拒绝)"

Android 4.1和4.4上的OneDrive v4.4,如果有帮助的话。

开始活动:

chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
chooseFile.setType("*/*");
chooseFile.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(Intent.createChooser(chooseFile, "Choose a file"), ACTIVITY_CHOOSE_FILE);

在onActivityResult()中:

Uri uri = intent.getData();

// Works for every other "file explorer" or source (dropbox, google drive, etc)
try {
    info.stream = getContentResolver().openInputStream(uri);
}
// OneDrive always ends up at this error case
catch (FileNotFoundException e) {
    e.printStackTrace();
    return info;
}

还为测试添加了这些权限,但没有运气。

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">
<uses-permission android:name="android.permission.INTERNET">

我已经完成了另一项测试,并意识到当尝试通过网络表单上传时,Chrome甚至都无法从OnePath读取文件。

但是,QuickEdit Text Editor可以从OneDrive读取文件,但似乎需要root访问权限。

关于如何做到这一点的任何想法?

编辑:按要求进行堆栈跟踪

W/System.err: java.io.FileNotFoundException: /data/data/com.microsoft.skydrive/no_backup/stream_cache/X@gmail.com/8/$R1N6ZQC.xml: open failed: EACCES (Permission denied)
W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:416)
W/System.err:     at java.io.FileInputStream.<init>(FileInputStream.java:78)
W/System.err:     at java.io.FileInputStream.<init>(FileInputStream.java:105)
W/System.err:     at android.content.ContentResolver.openInputStream(ContentResolver.java:447)
W/System.err:     at codepeekercommon.CodePeekerBaseActivity.getFileInfoFromIntent(CodePeekerBaseActivity.java:533)
W/System.err:     at codepeekercommon.CodePeekerBaseActivity$5.run(CodePeekerBaseActivity.java:424)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:615)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:92)
W/System.err:     at android.os.Looper.loop(Looper.java:137)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:4867)
W/System.err:     at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err:     at java.lang.reflect.Method.invoke(Method.java:511)
W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
W/System.err:     at dalvik.system.NativeStart.main(Native Method)
W/System.err: Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied)
W/System.err:     at libcore.io.Posix.open(Native Method)
W/System.err:     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:400)
W/System.err:   ... 14 more

1 个答案:

答案 0 :(得分:2)

基于该堆栈跟踪,OneDrive正在回送file: Uri,指向其应用的内部存储位置。

除了root之外,您无法访问该内容。希望有一天,微软会修复OneDrive,以便返回其他内容(例如,content: Uri,他们使用FileProvider或自己推送。