让用户尝试通过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
答案 0 :(得分:2)
基于该堆栈跟踪,OneDrive正在回送file:
Uri
,指向其应用的内部存储位置。
除了root之外,您无法访问该内容。希望有一天,微软会修复OneDrive,以便返回其他内容(例如,content:
Uri
,他们使用FileProvider
或自己推送。