SetResult() 回到在深度链接中调用 activity?
SetResult() back to calling activity in DEEP LINKING?
我正在我的 Android 应用程序中实施 DeepLinking。假设我正在使用 PhonePe 付款并选择使用其他应用程序和 select 我的应用程序付款。
Intent intent = new Intent().
intent.setData("the data");
startactivityforresult(intent, 111);
然后用户 select 使用我的应用程序和我的初始屏幕然后我转到其他 activity 像这样
Intent i = new Intent(Splashscreen.this, FirstActivity.class);
startactivity(i);
finish();
然后像这样给其他Activity -
Intent i2 = new Intent(FirstActivity.this, SecondActivity.class);
startactivity(i2);
finish();
然后在 SecondActivity 中的一段时间后,我将结果发送回调用 activity 或这里的 PhonePe,就像这样 -
Intent backintent = new Intent();
backintent.putExtra("somekey", "somevalue");
setResult(Result.OK, backintent);
现在,当我的应用程序关闭并返回到 Phoneme 时,Phonepe 收到的数据为空。
但是,如果我对只有一个 activity 的其他应用程序做同样的事情,调用 activity 捕获的数据不为空并且工作正常。
我想知道如何将数据发送回调用 activity。
如果仅在 相同的应用程序 .
中,我可以发送数据
启动 activity 时是否必须使用其他标签?
您还需要使用 startActivityForResult
方法启动任何新的 activity,然后通过 setResult
调用链返回结果,将其放入 onActivityResult
并再次设置setResult
.
更详细的描述
我们必须 activity 作为 startActivityForResult
开始。顾名思义,它将 return 你得到某种结果。此结果将来自您从此处启动的另一个 activity。
例如:MainActivity class
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 class
将此 activity 的结果发送到您启动的前一个 activity。
Intent intent=new Intent();
intent.putExtra("MESSAGE", "your message");
setResult(2,intent);
finish();//finishing activity
您只能将结果发送回 activity,其中 startActivityForResult
称为
在你的情况下,如下所示
PhonePe Activity -> Splash Activity -> 2nd Activity -> PhonePe Activity
One StartActivityForResult 对你的情况来说是不够的,因为 PhonePe 调用你的 splash activity 如果你想发回数据你必须从 splash activity 发送它,不是来自第二 activity
或者使用这个技巧
PhonePe Activity <-> Splash Activity <-> 2nd Activity
- 当您接到来自 PhonePe 的电话时,开始第 2 个 Activity 结果
- 当 2 activity 完成时将结果发送回 Splash Activity
- 当您在 Splash 上从第 2 个 activity 获得结果时 activity 将结果发送回 PhonePe
部分代码
从 splash activity
开始 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);
}
第二次 activity 返回结果
如果操作完成
setResult(Activity.RESULT_OK,data);
如果操作失败
setResult(Activity.RESULT_CANCELED,data);
Note
2nd Activity send result back to splash Activity, and the same result send back to PhonePe from Splash Activity
将 startActivityForResult
更改为 onActivityResult
。
我正在我的 Android 应用程序中实施 DeepLinking。假设我正在使用 PhonePe 付款并选择使用其他应用程序和 select 我的应用程序付款。
Intent intent = new Intent().
intent.setData("the data");
startactivityforresult(intent, 111);
然后用户 select 使用我的应用程序和我的初始屏幕然后我转到其他 activity 像这样
Intent i = new Intent(Splashscreen.this, FirstActivity.class);
startactivity(i);
finish();
然后像这样给其他Activity -
Intent i2 = new Intent(FirstActivity.this, SecondActivity.class);
startactivity(i2);
finish();
然后在 SecondActivity 中的一段时间后,我将结果发送回调用 activity 或这里的 PhonePe,就像这样 -
Intent backintent = new Intent();
backintent.putExtra("somekey", "somevalue");
setResult(Result.OK, backintent);
现在,当我的应用程序关闭并返回到 Phoneme 时,Phonepe 收到的数据为空。
但是,如果我对只有一个 activity 的其他应用程序做同样的事情,调用 activity 捕获的数据不为空并且工作正常。
我想知道如何将数据发送回调用 activity。 如果仅在 相同的应用程序 .
中,我可以发送数据启动 activity 时是否必须使用其他标签?
您还需要使用 startActivityForResult
方法启动任何新的 activity,然后通过 setResult
调用链返回结果,将其放入 onActivityResult
并再次设置setResult
.
更详细的描述
我们必须 activity 作为 startActivityForResult
开始。顾名思义,它将 return 你得到某种结果。此结果将来自您从此处启动的另一个 activity。
例如:MainActivity class
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 class
将此 activity 的结果发送到您启动的前一个 activity。
Intent intent=new Intent();
intent.putExtra("MESSAGE", "your message");
setResult(2,intent);
finish();//finishing activity
您只能将结果发送回 activity,其中 startActivityForResult
称为
在你的情况下,如下所示
PhonePe Activity -> Splash Activity -> 2nd Activity -> PhonePe Activity
One StartActivityForResult 对你的情况来说是不够的,因为 PhonePe 调用你的 splash activity 如果你想发回数据你必须从 splash activity 发送它,不是来自第二 activity
或者使用这个技巧
PhonePe Activity <-> Splash Activity <-> 2nd Activity
- 当您接到来自 PhonePe 的电话时,开始第 2 个 Activity 结果
- 当 2 activity 完成时将结果发送回 Splash Activity
- 当您在 Splash 上从第 2 个 activity 获得结果时 activity 将结果发送回 PhonePe
部分代码
从 splash activity
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);
}
第二次 activity 返回结果
如果操作完成
setResult(Activity.RESULT_OK,data);
如果操作失败
setResult(Activity.RESULT_CANCELED,data);
Note
2nd Activity send result back to splash Activity, and the same result send back to PhonePe from Splash Activity
将 startActivityForResult
更改为 onActivityResult
。