StartIntentOnResult重启活动

时间:2016-01-04 14:28:58

标签: android

这是我的第一个Android项目,我遇到了一些麻烦。我有一项主要活动,也是我的发射器活动。

我做了两个IntentOnResult来获取其他活动的信息(Bluetoothcheck和Search for Beacons)。但是如果我得到第二个意图的结果,它也会执行第一个意图。看起来它重新启动了洞活动。

我怎样才能"切换"活动之间?将其标记为启动模式单个实例无法正常工作。

我的错误是什么?

这是我的代码:

public class MainActivity extends Activity {

public static int REQUEST_ID_BluetoothCheck = 1;
public static int REQUEST_ID_MonitoringActivity = 1;

public static Button SearchBeacons = null;

//Result der Beacon Suche
public String UUID;
private String Major;
private String Minor;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //Check aufrufen um Bluetooth zu prüfen
    Intent intentCheckBluetooth = new Intent(getApplicationContext(), BluetoothCheck.class);
    startActivityForResult(intentCheckBluetooth, REQUEST_ID_BluetoothCheck);

    SearchBeacons = (Button)findViewById(R.id.SearchBeacons);
    //Button klick erkennen und MonotoringActivity starten
    SearchBeacons.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent intentStartSearch = new Intent(getApplicationContext(), MonitoringActivity.class);
            startActivityForResult(intentStartSearch, REQUEST_ID_MonitoringActivity);
        }
    });

    //Todo Links über Json holen für KIS/ PACS

}

//Methode für die Antwort einer anderen Activity
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_ID_BluetoothCheck) {
        if (resultCode == RESULT_OK) {
            Toast toast = Toast.makeText(getApplicationContext(), "Bluetoothcheck erfolgreich durchgeführt", Toast.LENGTH_SHORT);
            toast.show();
        }
        else{
            Toast toast = Toast.makeText(getApplicationContext(), "Bluetoothcheck war nicht erfolgreich. Die App funktioniert deshalb nicht und wurde beendet.", Toast.LENGTH_LONG);
            toast.show();
            finish();
        }
    }
    if (requestCode == REQUEST_ID_MonitoringActivity){
        if (resultCode == RESULT_OK) {
            Intent IntentBackToMain = getIntent();
            Bundle bundle = IntentBackToMain.getExtras();

            if(bundle != null) {

                UUID = bundle.getString("UUID");
                Major = bundle.getString("Major");
                Minor = bundle.getString("Minor");

            }
        }
        else{
            Toast toast = Toast.makeText(getApplicationContext(), "Beacon suche war nicht erfolgreich. Bitte Prüfen Sie ob sich ein Beacon in der Nähe befindet und probieren es gegebenenfalls nochmal", Toast.LENGTH_LONG);
            toast.show();
        }
    }
}

}

__________更新:

在答案课中,它看起来像:

Intent result = new Intent();
result.putExtra("UUID", (String) beacons.iterator().next().getId1().toString());
result.putExtra("Major", (String) beacons.iterator().next().getId2().toString());
result.putExtra("Minor", (String) beacons.iterator().next().getId3().toString());
setResult(RESULT_OK, result);
finish();
主要课程中的

if (requestCode == REQUEST_ID_MonitoringActivity){
        if (resultCode == RESULT_OK) {

            Bundle bundle = data.getExtras();
            if(bundle != null) {

                UUID = bundle.getString("UUID");
                Major = bundle.getString("Major");
                Minor = bundle.getString("Minor");
            }
        }
        else{
            Toast toast = Toast.makeText(getApplicationContext(), "Beacon suche war nicht erfolgreich. Bitte Prüfen Sie ob sich ein Beacon in der Nähe befindet und probieren es gegebenenfalls nochmal", Toast.LENGTH_LONG);
            toast.show();
        }
    }

1 个答案:

答案 0 :(得分:0)

不要对两个意图使用相同的请求代码,因为它们用于标识onActivityResult中的结果:

public static int REQUEST_ID_BluetoothCheck = 1;
public static int REQUEST_ID_MonitoringActivity = 2;

另一件可能错误的事: 要完成您使用startActivityForResult开始的活动,只需在其中使用finish(),不要使用其他Intent来调用您的主要活动。如果您不想将数据发送到主活动,请在完成活动之前使用包含数据的新意图调用setResult

Intent result = new Intent();
result.putExtra("key", someValue);
setResult(RESULT_OK, result);
finish();

此外,不要像这样得到意图:

Intent IntentBackToMain = getIntent();
Bundle bundle = IntentBackToMain.getExtras();

只需使用onActivityResult方法中提供的意图:

Bundle bundle = data.getExtras();