Dialog提示用户打开网络连接后返回Activity
一个android应用,先保存用户的手机号、确认网络连接打开、GPS打开,然后跟远程服务器建立连接,自己GPS定位。
保存用户的手机号、提示打开网络连接、提示打开GPS,用了3个Dialog。在Activity的onCreate()方法里面先判断前面3个条件是否满足,不满足就显示Dialog,为了不让3个Dialog挤在一起,用了下面的代码:
Java code? 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定义在
Java code? @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,请大家给个思路。谢谢。
这样设计的思想,不易于用户体验 站在用户的角度上来讲 如果用户3个都没打开 你岂不是要练成弹出3次 并且需设置3次
思路如下:另外单独写一个方法 来check各种调节 方法名可以取checkVaxxx
建议只做成1个提示信息,提示信息中说明需要设置的选项 有一个设置和取消按钮 用户点击设置时 直接将需要勾 GPS设置、网络设置 选勾选上 跳转到手机号码设置 如果用户设置了手机号码成功 ok了
如果用户跳转到设置手机号码,又不想设置了 那么还原设置项即可
我的思路仅供参考 还有很大的不足 待改进~~~~
,打开GPS设置后,你的activity自然会被恢复,所以你在onStop或者onResume判断条件去show dialog,如何?