【问题标题】:Android: StartActivityForResult to one Activity but return result in anotherAndroid:StartActivityForResult 到一个 Activity 但在另一个中返回结果
【发布时间】:2017-11-17 15:54:10
【问题描述】:

目前,我有一个问题要解决。

我的应用程序允许另一个应用程序(比如说 A)启动我的应用程序并取回结果。

应用A调用:

 Intent sendIntent = 
 getPackageManager().getLaunchIntentForPackage("com.my.package");

 sendIntent.setAction(Intent.ACTION_SEND);
 sendIntent.setFlags(0);
 sendIntent.putExtra("amount", "20000");
 startActivityForResult(sendIntent, 1);

然后我的应用将启动 MainActivity。
但是,要获得结果并发送回应用程序 A,我必须开始一些其他活动,比如说:

 MainActivity -> Activity B -> Activity C --> Activity D.

结果可以从Activity C或者Activity D返回给App A。

请注意:我不能使用标志 FLAG_ACTIVITY_FORWARD_RESULT,因为从 B 到 C,我已经调用了“startActivityForResult”。 (startActivityForResult 和标志 FLAG_ACTIVITY_FORWARD_RESULT 不能一起使用)。

您能给我一些想法如何实现这一目标吗?
非常感谢。

【问题讨论】:

    标签: android startactivityforresult


    【解决方案1】:

    使用 startActivityForResult() 方法从您的第一个活动调用第二个活动

    Intent i = new Intent(this, SecondActivity.class);
    startActivityForResult(i, 1);
    

    如果您想发回数据,请在第二个活动中:

    Intent returnIntent = new Intent();
    returnIntent.putExtra("result",result);
    setResult(Activity.RESULT_OK,returnIntent);
    finish();
    

    如果不想返回数据:

    Intent returnIntent = new Intent();
    setResult(Activity.RESULT_CANCELED, returnIntent);
    finish();
    

    现在在您的第一个 Activity 类中为 onActivityResult() 方法编写以下代码。

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    
        if (requestCode == 1) {
            if(resultCode == Activity.RESULT_OK){
                String result=data.getStringExtra("result");
            }
            if (resultCode == Activity.RESULT_CANCELED) {
                //Write your code if there's no result
            }
        }
    }//onActivityResult
    

    【讨论】:

    • 这没有回答原来的问题
    【解决方案2】:

    要返回结果,您可以从 MainActiviy 调用活动 B,然后转到活动 C,然后转到 D

    如果你想回来,你应该一个一个地做,完成每个活动并在 onActivityResult 中设置结果。

    如果您应该回到主要活动,请这样做:

        //in MainActivity
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Intent intent = new Intent(MainActivity.this, ActivityB.class);
        startActivityForResult(intent, REQUEST_CODE_MAIN_ACTIVITY);
    
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == REQUEST_CODE_MAIN_ACTIVITY && resultCode == RESULT_OK){
            //maybe get back to application that called you 
        }
    }
    
    //in Second activity
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_B);
        Intent intent = new Intent(ActivityB.this, ActivityC.class);
        startActivityForResult(intent, REQUEST_CODE_ACTIVITY_B);
    
    }
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == REQUEST_CODE_ACTIVITY_B && resultCode == RESULT_OK){
            setResult(RESULT_OK);
            finish();
        }
    }
    

    如果您可以直接从 Activity D 调用第一个应用程序 您可以调用第一个应用程序并关闭您的第二个应用程序

    【讨论】:

    • 如果你完成 MainActivity 并转到 Activivty B。结果 Cancel 立即返回到应用程序 A。
    • 不,我的意思是别的,我会记下代码,请稍候
    猜你喜欢
    • 2011-11-30
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    相关资源
    最近更新 更多