バーコード スキャナーを使用して、いくつかのコードをスキャンします。そのために、バーコード スキャナーでスキャン アクションのインテントを呼び出します。
問題は、メイン アクティビティの 2 つの異なる方法から、異なる目的 (異なるコード タイプのスキャン) で送信したいことです。インテント呼び出しがどこで開始されたかをonActivityResult()
どのように区別できますか?
フラグやタグなどを使用できますか?
バーコード スキャナーを使用して、いくつかのコードをスキャンします。そのために、バーコード スキャナーでスキャン アクションのインテントを呼び出します。
問題は、メイン アクティビティの 2 つの異なる方法から、異なる目的 (異なるコード タイプのスキャン) で送信したいことです。インテント呼び出しがどこで開始されたかをonActivityResult()
どのように区別できますか?
フラグやタグなどを使用できますか?
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){
// ...
}
}
最も簡単な方法の1つは、たとえば、アクティビティA、パス1、アクティビティBパス2から、インテント内でint extraを渡すことです。次に、get extraを使用して番号を読み取ります。これで、このインテントがどのアクティビティから発生したかがわかります。もちろんもっと洗練された方法もありますが、これが最も簡単な方法です。
If you start a activity to sacn barcode like this
startActivityForResult(intent,0);
then from two different method, change your call like this
//From first method
startActivityForResult(intent,1);
//From second method
startActivityForResult(intent,2);
then
@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
}
}
EDIT: Ah, giZm0's answer is easier!
インテントを送信するときはこれを使用します
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" );