java - 在android中的onCreate方法内部调用onCreate方法

标签 java android gps

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/

相关文章:

android - 如何摆脱Android中的缓存位置

android - 如何以编程方式将 GPS 位置发送到 Android Studio 2.0 AVD

java - 顺利更改按钮文本

java - 关于 spring mvc 错误 no class def found

java - 如何获取当前网页元素的定位器?

java - 放入 Map 时出现非法状态异常

java - Android ViewPager 检测垂直滑动

android - Room 无法验证数据完整性。如何在不编写迁移步骤的情况下修复它?

android - Android 上的 AsyncTask 和错误处理

sql-server - 从一组 GPS 坐标获取最大距离