startactivityforresult()对外部活动?

时间:2012-04-18 15:13:47

标签: java android android-activity android-intent

我有两个应用程序,A和B,这两个应用程序都是由我制作的,但它们位于不同的包中。我想从活动B中提取一些数据到我的活动A.

为此我使用ActivityA.startactivityforresult(ActivityB)

这个工作正常,直到我需要从ActivityB中检索我的数据,然后我开始为我的getExtra()调用获取NullpointerExceptions。

ActivityA:

protected void someMethod()
{
    Intent intent = getPackageManager().getLaunchIntentForPackage("some.package.app");
    intent.putExtra("action", "retrieveData");
    startActivityForResult(intent, 7854);
}

protected void onActivityResult (int requestCode, int resultCode, Intent intent)
{
    Log.d(TAG, "test: " + intent.getExtras().getString("test"));
}

ActivityB:

protected void onResume ()
{
    if (getIntent().getExtras() != null && getIntent().getExtras().getString("action").equals("retrieveData"))
    {
        Intent intent = getIntent();
        intent.putExtra("test", "This is a test response");

        setResult(7854, intent);
        finish();
    }
}

OUTPUT: test: null

我做错了什么,或者这是不允许的?

更新

04-18 18:28:34.908: E/AndroidRuntime(15711): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=7854, result=0, data=null} to activity {dk.rasive.testA/dk.rasive.testA.TestActivity}: java.lang.NullPointerException
04-18 18:32:48.892: E/AndroidRuntime(15801):    at dk.rasive.testA.TestActivity.onActivityResult(TestActivity.java:245)

第245行包含此代码

Log.d(TAG, "test: " + intent.getExtras().getString("test"));

1 个答案:

答案 0 :(得分:1)

我没有尝试使用不同应用程序中的活动,但活动A需要覆盖

onActivityResult(int requestCode, int resultCode, Intent data)

另外

setResult

使ResultCode不是RequestCode,尽管这不会对您发布的代码段产生影响。

编辑:

的AndroidManifest.xml

    <activity
        android:name="ActivityB"
        <intent-filter>
            <action android:name='retrieveData'/>
        </intent-filter>
    </activity>