一个android应用,先保存用户的手机号、确认网络连接打开、GPS打开,然后跟远程服务器建立连接,自己GPS定位。
    保存用户的手机号、提示打开网络连接、提示打开GPS,用了3个Dialog。在Activity的onCreate()方法里面先判断前面3个条件是否满足,不满足就显示Dialog,为了不让3个Dialog挤在一起,用了下面的代码:public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

if((myPhoneNumber = getMyPhoneNumber()) == null){
showDialog(DIALOG_MY_PHONE_NUMBER);
} else if (!isNetworkConnected()){
showDialog(DIALOG_NETWORK);
} else if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
showDialog(DIALOG_GPS);
} else {
……
//跟远程服务器建立连接
//GPS定位
……
}
}
    Dialog定义在@Override
protected Dialog onCreateDialog(int id){
Dialog dialog = null;
switch(id){
case DIALOG_MY_PHONE_NUMBER:
LayoutInflater factory = LayoutInflater.from(MainActivity.this);
final View dialogView = factory.inflate(R.layout.phone_number_dialog, (ViewGroup)findViewById(R.id.layout_root));

dialog = new AlertDialog.Builder(MainActivity.this)
.setTitle("手机号码设置")
.setView(dialogView)
.setPositiveButton("设置", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                EditText text = (EditText)dialogView.findViewById(R.id.my_phone_number);
                SharedPreferences settings = getPreferences(MODE_PRIVATE);
                SharedPreferences.Editor editor = settings.edit();
                editor.putString("myPhoneNumber", text.getText().toString());
                editor.commit();
                
                Intent intent = new Intent();
                intent.setClass(MainActivity.this, MainActivity.class);
                MainActivity.this.startActivity(intent);
            }
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
             MainActivity.this.finish();
            }
        })
        .create();
break;
case DIALOG_NETWORK:
dialog = new AlertDialog.Builder(MainActivity.this)
.setTitle("网络设置提示")
.setMessage("网络连接不可用,是否进行设置?")
.setPositiveButton("设置", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
             Intent intent = null;
                //判断手机系统的版本  即API大于10 就是3.0或以上版本
                if(android.os.Build.VERSION.SDK_INT > 10){
                    intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);
                }else{
                    intent = new Intent();
                    ComponentName component = new ComponentName("com.android.settings","com.android.settings.WirelessSettings");
                    intent.setComponent(component);
                    intent.setAction("android.intent.action.VIEW");
                }
                MainActivity.this.startActivity(intent);
            }
}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
             MainActivity.this.finish();
            }
        })
        .create();
break;
case DIALOG_GPS:
dialog = new AlertDialog.Builder(MainActivity.this)
.setTitle("GPS设置提示")
.setMessage("GPS不可用,是否进行设置?")
.setPositiveButton("设置", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Intent callGPSSettingIntent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);  
MainActivity.this.startActivity(callGPSSettingIntent);
}
})
.setNegativeButton("取消", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
MainActivity.this.finish();
}
})
.create();
break;
default:
dialog = null;
}
return dialog;
}
    我希望每一个Dialog的事情处理完以后,重新启动Activity,重新判断3个条件是否满足。第一个Dialog点“设置”按钮后可以重新启动Activity,后面两个Dialog启动了新的Activity,从新的Activity回来的时候,不知道怎样才能重新启动原来的Activity,请大家给个思路。谢谢。

解决方案 »

  1.   


    Lz这样设计的思想,不易于用户体验   站在用户的角度上来讲  如果用户3个都没打开  你岂不是要练成弹出3次  并且需设置3次     思路如下:另外单独写一个方法  来check各种调节    方法名可以取checkVaxxx建议只做成1个提示信息,提示信息中说明需要设置的选项  有一个设置和取消按钮 用户点击设置时  直接将需要勾   GPS设置、网络设置  选勾选上 跳转到手机号码设置  如果用户设置了手机号码成功  ok了            
        如果用户跳转到设置手机号码,又不想设置了   那么还原设置项即可
    我的思路仅供参考   还有很大的不足  待改进~~~~
      

  2.   

    你是说让代码设置GPS和网络连接?
      

  3.   

    貌似在代码中打开GPS和网络连接比较复杂。
      

  4.   

    我没理解错的话,打开GPS设置后,你的activity自然会被恢复,所以你在onStop或者onResume判断条件去show dialog,如何?
      

  5.   

    打开GPS和网络连接  我没研究过这方面的代码   在设置中 大部分勾选的选项  都是对应settings.db数据库中的某个字段的   我也只是给一个参考建议  具体实施方案  还是得靠LZ自己想啊