onActivityResult从未调用过

时间:2011-03-14 17:24:54

标签: android android-activity android-intent

到目前为止,我成功使用了startActivity函数,现在我需要使用startActivityResult,我遇到了问题。

使用此函数时,我希望启动的活动正确启动,但似乎永远不会调用onActivityResult函数。

这是我在FriendPicker活动中的代码,用于启动MoodPicker活动:

Intent intent = new Intent(FriendPicker.this, MoodPicker.class);
startActivityForResult(intent, 2);

这是我在MoodPicker活动中的代码:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent)
{                   
    super.onActivityResult(requestCode, resultCode, intent);

    Log.i("in OnActivityResult", "Activity Result");                        

    switch (requestCode)
    {
        case 2:             
            Log.i("in OnActivityResult", "Activity Resut 2");                

            break;
    }
}

并且我的日志文件中没有任何内容(我当然检查过我的日志文件是否正常工作并使用文本视图输出进行双重检查)。

有没有我忘记在清单文件中声明的内容?

提前致谢。

10 个答案:

答案 0 :(得分:28)

我有同样的问题并解决了它: 只需删除

android:launchMode="singleInstance"

答案 1 :(得分:18)

就我而言,我没有意识到我在清单中将startActivityForResult属性设置为true的活动中调用android:noHistory。因此,onActivityResult从未被调用,因为没有活动实例。

答案 2 :(得分:10)

您是否在MoodPicker课程中添加了setResult()来电?

答案 3 :(得分:6)

如果我正确阅读,所有引用的代码都必须在“FriendPicker”中。在“MoodPicker”中,您需要这样的代码来设置结果并自行结束:

this.setResult(SUCCESS_RETURN_CODE, i);
this.finish();

如果这有帮助,请告诉我......

答案 4 :(得分:6)

android:noHistory="true" 

android:launchMode="singleInstance"

将从接收结果中停止onActivityResult。

答案 5 :(得分:5)

android API中存在错误。在startActivityForResult(intent,requestCode)中; 只要requestCode = 0,这个功能就可以工作。但是,如果您将请求代码更改为 除了零以外的任何东西,ApiDemos都会失败(并且不会调用OnActivityResult)。 在这里找到:

[编辑:链接已被删除,因为谷歌群组被垃圾邮件超支]

答案 6 :(得分:3)

FriendPicker活动

Intent intent = new Intent(FriendPicker.this, MoodPicker.class);
startActivityForResult(intent, 2);


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent)
{                   
    super.onActivityResult(requestCode, resultCode, intent);

    Log.i("in OnActivityResult", "Activity Result");                        

    switch (requestCode)
    {
        case 2:             
             if (resultCode == Activity.RESULT_OK) {     //optional   
            Log.i("in OnActivityResult", "Activity Resut 2");                
              }
            break;
    }
}

MoodPicker类

Intent intent = new Intent(MoodPicker.this, FriendPicker.class);
        setResult(Activity.RESULT_OK, intent);
finish();

使用onActivityResult()时我遇到了同样的问题;因为我不明白这将如何正确应用,在这里你可以找到一个很好的解释如何使用onActivityResult onActivityResult doesn't work?

答案 7 :(得分:0)

我犯的错误是在创建我的意图后,我正在调用startActivity()而不是startActivityForResult()

有时简单的人会杀了你:)

答案 8 :(得分:0)

我的愚蠢错误。可能会帮助某人。

我将 onActivityResult(...)保留在另一个课程中。 它必须作为调用 startActivityForResult()的类中的方法。

答案 9 :(得分:0)

如果您在本机模块中的 react-native 中对此感到疑惑:

在您的 MainActivity 中:

...
private ReactInstanceManager mReactInstanceManager;
...
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    mReactInstanceManager.onActivityResult(requestCode, resultCode, data);
}

在您的模块中:

public class MyModule extends ReactContextBaseJavaModule implements ActivityEventListener {
    static final int REQUEST_VIDEO_CAPTURE = 1;

    final ReactApplicationContext reactContext;
    Promise promise;

    public GeneralIntentModule(ReactApplicationContext reactContext) {
        super(reactContext);
        this.reactContext = reactContext;
        this.reactContext.addActivityEventListener(this);
    }

    @Override
    public String getName() {
        return "MyModule ";
    }

    @ReactMethod
    public void captureVideo(Promise promise) {
        this.promise = promise;
        Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
        if (takeVideoIntent.resolveActivity(this.reactContext.getPackageManager()) != null) {
            this.reactContext.startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE, null);
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        this.promise.resolve(data.getDataString());
    }
}