无法从 2 个不同的设备访问 Google 驱动器
Cannot access Google Drive from 2 different device
我有一个应用程序可以在 Google Drive
上创建一个带有一些文本的 word 文件。如果我尝试从我创建该文件的设备访问 Google Drive
上的 word 文件,那么它会工作并且一切顺利,我可以读写。但是,如果我尝试在具有相同应用程序的不同设备上访问具有相同 DriveId
的相同文件,那么我将无法访问它。我在 Whosebug
上看到了 2 个相关问题,但我无法弄清楚问题所在。任何帮助,将不胜感激。
这是我正在使用的 GoogleApiClient 连接:-
if(mGoogleApiClient == null)
{
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Drive.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addScope(Drive.SCOPE_FILE)
.build();
}
mGoogleApiClient.connect();
这是程序代码:-
@Override
public void onConnected(Bundle bundle) {
msg.Log("onConnected");
msg.Log(inputText.encodeToString());
DriveFile file = Drive.DriveApi.getFile(mGoogleApiClient, inputText);
file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null).setResultCallback(contentsOpenedCallBack);
}
final private ResultCallback<DriveApi.DriveContentsResult> contentsOpenedCallBack = new ResultCallback<DriveApi.DriveContentsResult>() {
@Override
public void onResult(DriveApi.DriveContentsResult driveContentsResult) {
msg.Log("onResult");
msg.Log("toString ");
if (!driveContentsResult.getStatus().isSuccess()) {
Toast.makeText(getBaseContext(), "Wrong Success", Toast.LENGTH_SHORT).show();
}
final DriveContents contents = driveContentsResult.getDriveContents();
BufferedReader reader = new BufferedReader(new InputStreamReader(contents.getInputStream()));
StringBuilder builder = new StringBuilder();
String line;
try {
while ((line = reader.readLine()) != null) {
builder.append(line);
}
} catch (IOException e) {
msg.Log(e.toString());
}
String contentsAsString = builder.toString();
try {
JSONObject json = new JSONObject(contentsAsString);
String Text = json.getString("text");
SharedPreferences sp = getSharedPreferences("Font", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString("value", Text);
msg.Log(Password);
} catch (Exception e) {
msg.Log(e.toString());
}
}
};
这是错误信息:-
java.lang.SecurityException: Permission Denial: get/set setting for user asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL
at com.android.server.am.ActivityManagerService.handleIncomingUser(ActivityManagerService.java:13140)
at android.app.ActivityManager.handleIncomingUser(ActivityManager.java:2038)
at com.android.providers.settings.SettingsProvider.callFromPackage(SettingsProvider.java:607)
at android.content.ContentProvider$Transport.call(ContentProvider.java:279)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:273)
at android.os.Binder.execTransact(Binder.java:388)
at dalvik.system.NativeStart.run(Native Method)
03-14 21:48:48.885 2341-3805/? E/EnterpriseContainerManager﹕ ContainerPolicy Service is not yet ready!!!
03-14 21:48:48.895 25947-25947/com.gajendraprofile.googledrivesample E/ViewRootImpl﹕ sendUserActionEvent() mView == null
03-14 21:48:50.615 9473-26051/? E/DriveAsyncService﹕ Provided DriveId is invalid.
OperationException[Status{statusCode=Provided DriveId is invalid., resolution=null}]
at com.google.android.gms.drive.api.e.d(SourceFile:331)
at com.google.android.gms.drive.api.e.a(SourceFile:632)
at com.google.android.gms.drive.api.a.ab.a(SourceFile:85)
at com.google.android.gms.drive.api.a.b.a(SourceFile:27)
at com.google.android.gms.common.service.c.onHandleIntent(SourceFile:60)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:176)
at android.os.HandlerThread.run(HandlerThread.java:61)
DriveId 在不同的设备上没有任何意义。如果你想在不同的设备上使用 file/folder,你必须使用 ResourceId。那是来自 RESTful API 的旧 'id'。 DriveId 特定于 Google Play Services* 的一个特定实例。
您还可以使用标题、mime、parent 等元数据搜索 files/folders,...但是!只有 DriveId 和 ResourceId 是唯一 ID,其他所有内容(包括标题)都不是。这意味着您可以在驱动器上的同一位置拥有多个同名文件/文件夹!
*) 试图在 SO 29030110 上对此进行解释。
祝你好运
我有一个应用程序可以在 Google Drive
上创建一个带有一些文本的 word 文件。如果我尝试从我创建该文件的设备访问 Google Drive
上的 word 文件,那么它会工作并且一切顺利,我可以读写。但是,如果我尝试在具有相同应用程序的不同设备上访问具有相同 DriveId
的相同文件,那么我将无法访问它。我在 Whosebug
上看到了 2 个相关问题,但我无法弄清楚问题所在。任何帮助,将不胜感激。
这是我正在使用的 GoogleApiClient 连接:-
if(mGoogleApiClient == null)
{
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addApi(Drive.API)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addScope(Drive.SCOPE_FILE)
.build();
}
mGoogleApiClient.connect();
这是程序代码:-
@Override
public void onConnected(Bundle bundle) {
msg.Log("onConnected");
msg.Log(inputText.encodeToString());
DriveFile file = Drive.DriveApi.getFile(mGoogleApiClient, inputText);
file.open(mGoogleApiClient, DriveFile.MODE_READ_ONLY, null).setResultCallback(contentsOpenedCallBack);
}
final private ResultCallback<DriveApi.DriveContentsResult> contentsOpenedCallBack = new ResultCallback<DriveApi.DriveContentsResult>() {
@Override
public void onResult(DriveApi.DriveContentsResult driveContentsResult) {
msg.Log("onResult");
msg.Log("toString ");
if (!driveContentsResult.getStatus().isSuccess()) {
Toast.makeText(getBaseContext(), "Wrong Success", Toast.LENGTH_SHORT).show();
}
final DriveContents contents = driveContentsResult.getDriveContents();
BufferedReader reader = new BufferedReader(new InputStreamReader(contents.getInputStream()));
StringBuilder builder = new StringBuilder();
String line;
try {
while ((line = reader.readLine()) != null) {
builder.append(line);
}
} catch (IOException e) {
msg.Log(e.toString());
}
String contentsAsString = builder.toString();
try {
JSONObject json = new JSONObject(contentsAsString);
String Text = json.getString("text");
SharedPreferences sp = getSharedPreferences("Font", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString("value", Text);
msg.Log(Password);
} catch (Exception e) {
msg.Log(e.toString());
}
}
};
这是错误信息:-
java.lang.SecurityException: Permission Denial: get/set setting for user asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL
at com.android.server.am.ActivityManagerService.handleIncomingUser(ActivityManagerService.java:13140)
at android.app.ActivityManager.handleIncomingUser(ActivityManager.java:2038)
at com.android.providers.settings.SettingsProvider.callFromPackage(SettingsProvider.java:607)
at android.content.ContentProvider$Transport.call(ContentProvider.java:279)
at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:273)
at android.os.Binder.execTransact(Binder.java:388)
at dalvik.system.NativeStart.run(Native Method)
03-14 21:48:48.885 2341-3805/? E/EnterpriseContainerManager﹕ ContainerPolicy Service is not yet ready!!!
03-14 21:48:48.895 25947-25947/com.gajendraprofile.googledrivesample E/ViewRootImpl﹕ sendUserActionEvent() mView == null
03-14 21:48:50.615 9473-26051/? E/DriveAsyncService﹕ Provided DriveId is invalid.
OperationException[Status{statusCode=Provided DriveId is invalid., resolution=null}]
at com.google.android.gms.drive.api.e.d(SourceFile:331)
at com.google.android.gms.drive.api.e.a(SourceFile:632)
at com.google.android.gms.drive.api.a.ab.a(SourceFile:85)
at com.google.android.gms.drive.api.a.b.a(SourceFile:27)
at com.google.android.gms.common.service.c.onHandleIntent(SourceFile:60)
at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:176)
at android.os.HandlerThread.run(HandlerThread.java:61)
DriveId 在不同的设备上没有任何意义。如果你想在不同的设备上使用 file/folder,你必须使用 ResourceId。那是来自 RESTful API 的旧 'id'。 DriveId 特定于 Google Play Services* 的一个特定实例。
您还可以使用标题、mime、parent 等元数据搜索 files/folders,...但是!只有 DriveId 和 ResourceId 是唯一 ID,其他所有内容(包括标题)都不是。这意味着您可以在驱动器上的同一位置拥有多个同名文件/文件夹!
*) 试图在 SO 29030110 上对此进行解释。
祝你好运