2

我正在开发两个安卓应用程序:

  • 第一个是带有启动器的普通应用程序,依此类推
  • 另一个是仅具有查看器活动的应用程序(请参阅清单):

    <activity
        android:name=".MyActivity"
        android:icon="@drawable/icon"
        android:label="@string/dropbox" >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.dropbox.client2.android.AuthActivity"
        android:configChanges="orientation|keyboard"
        android:launchMode="singleTask" >
        <intent-filter>
            <data android:scheme="db-XXXXX" />
    
            <action android:name="android.intent.action.VIEW" />
    
            <category android:name="android.intent.category.BROWSABLE" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>
    

计划是,第一个应用程序不需要互联网权限,第二个是第一个应用程序的某种附加组件。

第二个应用程序应该与 Dropbox 同步文件(使用 Core API,而不是使用 Sync API)。

从我的第一个应用程序开始,我从第二个应用程序开始“MyActivity”,如下所示:

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setComponent(new ComponentName("my.package","my.package.MyActivity"));
    intent.putExtra("filePath", "/myFile.txt");
    startActivityForResult(intent, SYNC_REQUEST);

这样可行。活动出现在那里,如果尚未授权,用户必须按下按钮。然后会执行下面的代码

    AndroidAuthSession session = buildSession();
    mApi = new DropboxAPI<AndroidAuthSession>(session);

    mApi.getSession().startAuthentication(MyActivity.this);

如果用户没有安装 Dropbox,浏览器会弹出。

现在我的麻烦开始了:

只要用户按下“接受”或“拒绝”,浏览器就不会消失。它保持打开状态并且 MyActivity 不会恢复(不会调用 onResume!)。

我发现,添加

    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

在从我的第一个应用程序启动 MyActivity 之前会解决问题,但是我不能听/等待 MyActivity 的结果。

我烦了。任何人都可以帮助我或给我一些建议吗?

谢谢!

4

1 回答 1

0

当您使用 startAuthentication 方法时。它将自动启动 AuthActivity。您不需要显式调用 startActivity()。然后在活动的 onResume 方法中编写以下代码:

@Override
    protected void onResume()
    {
        super.onResume();
        if (if dropBoxAPI!= null && dropboxAPI.getSession().authenticationSuccessful())
        {
            try {

                dropboxAPI.getSession().finishAuthentication();
                oAuth2Token = dropboxAPI.getSession().getOAuth2AccessToken();
            }
            catch (IllegalStateException ie)
            {
                ie.printStackTrace();
            }
        }

    }
于 2014-08-25T11:54:53.107 回答