2011-04-22 3 views
0
else{ //this is part of some onclick listener of a button in the program 
     slider.close(); 
     mapView.setClickable(false); 
     Toast.makeText(getBaseContext(), "GPS cannot retrieve your location. GPS needs clear sky or service is off. Please turn on GPS service.", Toast.LENGTH_LONG).show(); 
     final Button bt = (Button)findViewById(R.id.turnGPS); 
     bt.setVisibility(View.VISIBLE); 
     bt.setOnTouchListener(new OnTouchListener(){ 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 
       Intent activateGps = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
       //Map.this.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS)); 
       Map.this.startActivityForResult(activateGps, RESULT_OK); 
       //bt.setVisibility(View.INVISIBLE); 
       return false; 
      } 

     }); 

    } 
} 

사용자가 GPS를 활성화 할 수 있도록 새로운 의도를 시작하고 싶습니다 (GPS가 활성화되지 않은 경우). Activity가 성공했는지 아닌지를 응답 할 수있는 startActivityForResult 메소드를 사용했습니다. 성공하면 사용자 인터페이스에서 몇 가지 변경 작업을 수행해야합니다. 시도했지만 GPS를 사용하도록 설정했지만 UI는 변경하지 않았습니다 (예 : 버튼이 숨기지 않음). 내가 뭘 잘못하고있어?onActivityResult for Intent

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if(requestCode==RESULT_OK) 
    { 
     if(resultCode == RESULT_OK && locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) 
     { 
      Button bt = (Button)findViewById(R.id.turnGPS); 
      bt.setVisibility(View.INVISIBLE); 
      this.finish(); 
     } 
     else if(resultCode == RESULT_CANCELED) 
     { 
      Toast.makeText(getBaseContext(), "No GPS device or service enabled", Toast.LENGTH_LONG+Toast.LENGTH_LONG).show(); 
     } 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 

여기 내 onActivityResult 메소드입니다. this.finish()가 있습니까? 현재 액티비티가 사용 가능할 때 종료하므로 OnResume()이 시작됩니다.

답변

2

PreferenceActivitystartActivityForResult() (이 중 하나는 onActivityResult() called prematurely 참조)과 함께 사용하는 동안 몇 가지 제한 사항이 있습니다. startActivityForResult() 대신 PreferenceActivitystartActivity()에 의해를 시작하고 는 상단의 활동으로 즉시 호출됩니다 onStart() 또는 onResume() 방법에서 환경 설정을 다시 읽을 필요가 코드입니다를 넣어 :

나의 제안이다 스택의 안드로이드의 버그가있어

0

합니다 ... startActivityForResult() 방법을 호출하여 활동에

android:launchMode="singleInstance(or singleTasc)" 

android:launchMode="singleTop" 

을 변경하고 다시 실행합니다. 여전히 효과가있을 것입니다.

0
<activity 
     android:name=".MainActivity" 
     android:label="@string/title_activity_main" 
     android:alwaysRetainTaskState="True" 
     android:launchMode="singleTop"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
+0

답변에 대한 설명을 추가하십시오. – Onik

관련 문제