我使用条形码扫描仪扫描一些代码。为此,我在条形码扫描仪中调用扫描操作意图。
问题是我想在我的主要活动中为不同的目的(不同的代码类型扫描)从 2 种不同的方法发送它。由于我只有一个答案,onActivityResult()
如何区分 Intent 呼叫的开始位置?
我可以使用一些标志或标签或任何东西吗?
我使用条形码扫描仪扫描一些代码。为此,我在条形码扫描仪中调用扫描操作意图。
问题是我想在我的主要活动中为不同的目的(不同的代码类型扫描)从 2 种不同的方法发送它。由于我只有一个答案,onActivityResult()
如何区分 Intent 呼叫的开始位置?
我可以使用一些标志或标签或任何东西吗?
您可以requestCode
在开始活动时提供。然后,这将在覆盖时返回onActivityResult
。通过这种方式,您可以区分请求。
private static final int METHOD_1_ID = 1;
private static final int METHOD_2_ID = 2;
private void sendIntentFromMethod2(){
startActivityForResult(yourIntent, METHOD_2_ID);
}
private void sendIntentFromMethod1(){
startActivityForResult(yourIntent, METHOD_1_ID);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if (requestCode == METHOD_1_ID){
// ...
}else if(requestCode == METHOD_2_ID){
// ...
}
}
最简单的方法之一是在意图中传递例如 int extra,从活动 A 传递 1,从活动 B 传递 2。然后使用 get extra 并读取数字,现在您知道该意图源自哪个活动。当然还有更复杂的方法,但这是最简单的方法。
发送 Intent 时使用此
Intent.putExtra("caller", caller_id)
接收意图使用时
Bundle extras = getIntent().getExtras();
int id = extras.getInt("caller");
在调用 setResult 之前
intent.puInt("phrase", id);
在 onActivityResult 使用
Bundle extras = intent.getExtras();
int id = extras.getId( "selection" );
如果你像这样开始一个 sacn 条形码的活动
startActivityForResult(intent,0);
然后从两种不同的方法,像这样改变你的电话
//从第一个方法
startActivityForResult(intent,1);
//从第二种方法
startActivityForResult(intent,2);
然后
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==1)
{
//This is result for 1st method
}
else if(requestCode==2)
{
//This is result for 2st method
}
}
编辑:啊,giZm0 的答案更简单!