这是我的第一个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();
}
}
答案 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();