SetResult()返回到DEEP LINKING中的调用活动?

我在我的Android应用程序中实现DeepLinking。 假设我正在使用PhonePe进行付款,并使用其他应用程序select付款并select我的应用程序。

Intent intent = new Intent(). intent.setData("the data"); startactivityforresult(intent, 111); 

然后用户select我的应用程序和我的启animation面,然后我去这样的其他活动

 Intent i = new Intent(Splashscreen.this, FirstActivity.class); startactivity(i); finish(); 

然后到这样的其他活动 –

 Intent i2 = new Intent(FirstActivity.this, SecondActivity.class); startactivity(i2); finish(); 

而且在SecondActivity的一段时间之后,我把结果发送给调用活动或者这里的PhonePe –

 Intent backintent = new Intent(); backintent.putExtra("somekey", "somevalue"); setResult(Result.OK, backintent); 

现在,当我的应用程序closures并返回到Phoneme Phonepe收到的数据为空。

但是,如果我与其他只有一个活动的应用程序做同样的事情,调用活动捕获的数据不是null,并且工作正常。

我想知道如何将数据发送callback用活动。 我能够发送数据,如果它只在相同的应用程序内

开始活动时是否需要使用其他标签?

Solutions Collecting From Web of "SetResult()返回到DEEP LINKING中的调用活动?"

您还需要使用startActivityForResult方法启动任何新的活动,然后将结果返回给setResult调用链,并将其放在onActivityResult并使用setResult重新设置。

更详细的描述

我们必须以startActivityForResult开始活动。 顾名思义,它会返回给你一些结果。 这个结果将来自你从这里发起的另一个活动。

例如: MainActivity类

  Intent intent=new Intent(MainActivity.this,SecondActivity.class); startActivityForResult(intent, 2);// Activity is started with requestCode 2 

onActivityResult方法中获得像那样的结果。

 // Call Back method to get the Message form other Activity @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // check if the request code is same as what is passed here it is 2 if(requestCode==2) { String message=data.getStringExtra("MESSAGE"); textView1.setText(message); } 

SecondActivity类

将此活动的结果发送到您启动的以前的活动。

  Intent intent=new Intent(); intent.putExtra("MESSAGE", "your message"); setResult(2,intent); finish();//finishing activity 

您只能将结果发送回startActivityForResult所调用的活动

在你的情况下,如下所示

PhonePe Activity – > Splash Activity – > 2nd Activity – > PhonePe Activity

一个StartActivityForResult是不够你的情况,因为PhonePe调用你的飞溅活动,如果你想发回数据,你必须从飞溅活动发送它,而不是从第二活动

或者使用这个技巧

PhonePe活动< – >飞溅活动< – >第二活动

  1. 当你从PhonePe接到电话开始第二个活动的结果
  2. 当2个活动完成后,将结果发送回Splash Activity
  3. 当您从Splash活动的第二次活动中获得结果时,会将结果发送回PhonePe

一些代码
从splash活动启动SecondActivity

 Intent intent=new Intent(SplashActivity.this,SecoundActivity.class); intent.putExtra("SomeKey","SomeValue"); startActivityForResult(intent,REQUEST_CODE); 

在Splash Activity上处理结果

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

在你的第二个活动回传结果
如果操作完成

 setResult(Activity.RESULT_OK,data); 

如果操作失败

 setResult(Activity.RESULT_CANCELED,data); 

注意

第二次活动发回结果回到飞溅活动,并且相同的结果从Splash活动回到PhonePe

startActivityForResult更改为onActivityResult