我正在使用facebook sdk来记录用户。
我调用了我创建的只有facebook登录的活动,并且应该将结果返回到原始活动。
以下是我如何调用它(它来自自定义组件的内部,这就是使用getContext()
的原因):
Intent intent = new Intent(getContext(), FacebookAuthenticationActivity.class);
Log.d(TAG, "Starting facebook authentication for result");
((Activity)getContext()).startActivityForResult(intent, REQUEST_FACEBOOK);
在这里,我想要回复:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
Log.d(TAG, "Result from something!");
if(requestCode == LoginWidget.REQUEST_FACEBOOK) {
if(resultCode == RESULT_OK && intent != null) {
Log.d(TAG, "Result from facebook received!");
mLoginWidget.onFacebookLoginSucceeded(intent);
}
}
super.onActivityResult(requestCode, resultCode, intent);
}
在facebook活动中,它是facebook developers page的代码。该代码没有错误......出于某种奇怪的原因,该活动会在调用onActivityResult
上的onCreate
之前调用FacebookAuthActivity
。
我写的coode是用户登录,获取一些信息,最后打电话:
Intent intent = new Intent();
intent.putExtra("user_json", response);
Log.d(TAG, "Setting result to: " + intent);
setResult(RESULT_OK, intent);
finish();
在查看日志后,我得到的是:
07-11 16:34:27.992: D/LoginWidget(6863): Starting facebook authentication for result
07-11 16:34:27.992: D/ProgramActivity(6863): I am starting an activity to get a result!
07-11 16:34:28.101: D/ProgramActivity(6863): Result from something!
07-11 16:34:40.875: D/Facebook-authorize(6863): Login Success! access_token=xxx expires=1347195352881
07-11 16:34:40.875: D/FacebookAuthentication(6863): User accepted our app in facebook!
07-11 16:34:42.351: D/FacebookAuthentication(6863): Setting result to: Intent { (has extras) }
所以我没有想法...出于某种原因,当我调用此活动时,它立即调用父项onActivityResult
而没有结果,然后登录,设置实际结果,调用完成,并且绝不会使用真实的回复来调用onActivityResult
。
我在这里遗漏了什么吗?我是否必须为此活动设置特定标志才能正确地将结果返回给我?
这只是一个简单的活动,有一堆异步的facebook调用,然后回调结果......
更新
为了更清楚,我没有从此代码中得到任何错误。问题是,当我设置结果时,在登录后,原始活动不会收到结果。
答案 0 :(得分:6)
答案是here。此“功能”不允许使用singleInstace
开始的活动来调用结果活动。
我将我的活动更改为singleTop
,现在它可以正常工作。
答案 1 :(得分:0)
从您的示例判断,既没有为该意图设置Action / Uri也没有设置包上下文/类。
http://developer.android.com/reference/android/content/Intent.html#Intent()
您必须设置其中一个,即
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("xxx://someUri");
或
Intent intent = new Intent(this, MyActivity.class);
其中MyActivity.class
是应该处理某些内容并返回结果的Activity的名称/类型。