Android:StartActivityForResult 到一个 Activity 但在另一个中返回结果
Posted
技术标签:
【中文标题】Android:StartActivityForResult 到一个 Activity 但在另一个中返回结果【英文标题】:Android: StartActivityForResult to one Activity but return result in another 【发布时间】: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 不能一起使用)。
您能给我一些想法如何实现这一目标吗? 非常感谢。
【问题讨论】:
【参考方案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。 不,我的意思是别的,我会记下代码,请稍候以上是关于Android:StartActivityForResult 到一个 Activity 但在另一个中返回结果的主要内容,如果未能解决你的问题,请参考以下文章
startActivity 和 startSubActivity
无论应用程序状态如何,都可以从通知中正确启动 Activity
Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )
Android 逆向Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )