MainActivity.java
public class MainActivity extends FragmentActivity {
LocationManager locationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if ( !locationManager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
showDialog();
}
}
public void showDialog(){
//GPS-Dialog
GpsEnablingDialog gpsAlert;
try {
gpsAlert = new GpsEnablingDialog();
gpsAlert.show(getSupportFragmentManager(), "GpsAlert_Tag");
} catch (Exception e) {
// TODO Auto-generated catch block
Log.d("My-Log-Msg",e.toString());
e.printStackTrace();
}
}
}
我尝试过::
import android.content.Context;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
public class MainActivity extends FragmentActivity {
LocationManager locationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if ( !locationManager.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
showDialog();
try {
onCreate(savedInstanceState);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("My-Log-Msg",e.toString());
}
}
}
public void showDialog(){
//GPS-Dialog
GpsEnablingDialog gpsAlert;
try {
gpsAlert = new GpsEnablingDialog();
gpsAlert.show(getSupportFragmentManager(), "GpsAlert_Tag");
} catch (Exception e) {
// TODO Auto-generated catch block
Log.d("My-Log-Msg",e.toString());
e.printStackTrace();
}
}
}
<小时/>
日志::
04-23 14:22:19.969: D/My-Log-Msg(1586): java.lang.IllegalStateException: Already attached
04-23 14:22:20.419: D/gralloc_goldfish(1586): Emulator without GPU emulation detected.
我的理解::
- 从日志中我可以清楚地了解到我正在尝试附加 已经附加的东西
- 为什么我要这样做::第一次加载 Activity 时,它会检查 是否启用 GPS,会弹出一个对话框并带我去 设置页面
- 现在我启用 GPS,然后按手机上的后退按钮返回
主 Activity
- 我想从头开始重新启动 Activity 生命周期并检查 这些 GPS 并进一步进行
关于如何实现这一目标的任何想法
最佳答案
您永远不应该显式调用onCreate()
。 Android 在创建 Activity 时调用它。您应该查看the activity lifecycle并查看当用户从设置 Activity 返回时是否无法将某些代码移至另一个回调方法(例如 onResume()
)。
如果您确实希望再次调用 onCreate()
,您应该查看 Activity.recreate()
这是在 API 级别 11 中添加的。如果您低于该 API,您可以使用以下代码解决此问题:
Intent intent = getIntent();
finish();
startActivity(intent);
这完成了该 Activity ,并以与最初创建它相同的 Intent 再次启动它。
关于java - 在android中的onCreate方法内部调用onCreate方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23239507/