Android onActivityResult提前调用

use*_*577 8 android android-intent android-activity

我有2个活动,每个活动都在单独的应用程序中.Activity1有一个用户可以单击的按钮,它在onClick()方法中使用intent调用第二个活动:

Intent myIntent = getPackageManager().getLaunchIntentForPackage(com.myProject.Activity2);
startActivityForResult(myIntent, 600);
Run Code Online (Sandbox Code Playgroud)

这正确地从Activity1启动Activity2,但onActivityResult在Activity2中调用之前onCreate在Activity1中调用,而不是在onBackPressed()我设置返回意图的地方调用.

这是onCreateActivity2 的方法:

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}
Run Code Online (Sandbox Code Playgroud)

以下是onBackPressedActivity2 的当前版本方法:

@Override
public void onBackPressed() {
    Intent intent = new Intent();
    intent.putExtra("Stuff", someStuff);

    if(getParent()==null){
        setResult(Activity.RESULT_OK, intent);
    }else{
        getParent().setResult(Activity.RESULT_OK, intent);
    }
    finish();
    super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)

我的AndroidManifest.xml为Activity2提供了以下intent过滤器:

<intent-filter>
    <action android:name="android.intent.action.MAIN"/>
    <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

在这里建议验证我launchModestandard(而不是singleTask等),我的请求代码不是负面的,如此处所述.我也尝试过,但那也是不行的.android:launchMode="singleTop"

我也试过不调用finish()onBackPressed()提到的活性2 这里(也只是super.onBackPressed()作为建议在这里),并再次调用它的建议在这里.

另外,我试着评论这条线,intent.putExtra("Stuff", someStuff);因为它似乎给这个人带来了麻烦.

关于我可能做错什么的任何想法?

use*_*577 9

所以这是解决它的最终解决方案:

我将Activity1的意图更改为以下内容:

Intent myIntent = new Intent();
myIntent.setClassName("com.myProject", "com.myProject.Activity2");
startActivityForResult(myIntent, 600);
Run Code Online (Sandbox Code Playgroud)

出于某种原因,除了第一个参数给出的包名称之外,Android还需要第二个参数的完全限定名称.现在它有效!:)