2016-01-04 3 views
0

Это мой первый Android-проект, и у меня есть некоторые проблемы. У меня есть основной вид деятельности, который также является моей деятельностью.Активность запуска StartIntentOnResult

Я делаю два IntentOnResult, чтобы получать информацию от других мероприятий (Bluetoothcheck и поиск маяков). Но если я получу результат второго намерения, он также выполнит первый. Похоже, он перезапускает активность дыры.

Как я могу «переключиться» между действиями? Пометить его как один экземпляр режима запуска не работает.

В чем моя ошибка?

Вот мой код:

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(); 
     } 
    } 
} 

}

__________Update:

В классе ответа он выглядит как:

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

Не используйте одни и те же коды запроса для обоих намерений, поскольку они используются для определения результата в onActivityResult:

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

Другое дело, что могло бы быть неправильно: Для завершения деятельности вы начали с startActivityForResult, просто используйте в них finish(), не используйте другое намерение для вызова основной деятельности. Если вы не хотите отправлять данные в свою основную деятельность, вызовите 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(); 
+0

Ok я изменил его. Но результат тот же! – AndroidNewbee

+0

Вы покинули режим запуска по умолчанию или все еще используете для него другие настройки? onCreate не следует вызывать при возврате из другого действия при использовании режима запуска по умолчанию. – tknell

+0

Как вы заканчиваете другие действия? – tknell

Смежные вопросы