一.设置进入手机防盗的对话框
1.首先需要判断是否设置过密码:
/**
* 判断用户是否设置过密码
*
* @return
*/
private boolean isSetupPwd() {
String password = sp.getString("password", null);
if (TextUtils.isEmpty(password)) {
return false;
} else {
return true;
}
}
2.第一次进入,设置密码对话框
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:background="#ffffff"
android:gravity="center_horizontal"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="#8866ff00"
android:gravity="center"
android:text="设置密码"
android:textColor="#000000"
android:textSize="20sp" />
<EditText
android:textColor="#000000"
android:id="@+id/et_pwd"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="请输入密码"
android:inputType="textPassword" />
<EditText
android:textColor="#000000"
android:id="@+id/et_pwd_confirm"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="请再次输入密码"
android:inputType="textPassword" />
<LinearLayout
android:layout_width="300dp"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal" >
<Button
android:id="@+id/bt_ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/btn_selector"
android:text="确定"
android:textColor="#000000" />
<Button
android:id="@+id/bt_cancle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"
android:background="@drawable/btn_selector"
android:text="取消"
android:textColor="#000000" />
</LinearLayout>
</LinearLayout>
然后加载该xml文件
/**
* 显示设置密码对话框
*/
protected void showSetupPwdDialog() {
// TODO Auto-generated method stub
AlertDialog.Builder builder = new Builder(this);
View view = View.inflate(getApplicationContext(),
R.layout.dialog_setup_pwd, null);
final AlertDialog dialog = builder.create();
//加载控件
et_pwd = (EditText) view.findViewById(R.id.et_pwd);
et_pwd_confirm = (EditText) view.findViewById(R.id.et_pwd_confirm);
bt_ok = (Button) view.findViewById(R.id.bt_ok);
bt_cancle = (Button) view.findViewById(R.id.bt_cancle);
bt_cancle.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
bt_ok.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
String pwd = et_pwd.getText().toString().trim();
String pwd_confrim = et_pwd_confirm.getText().toString().trim();
if(TextUtils.isEmpty(pwd)||TextUtils.isEmpty(pwd_confrim)){
Toast.makeText(getApplicationContext(), "密码不能为空", 0).show();
return;
}
if(!pwd.equals(pwd_confrim)){
Toast.makeText(getApplicationContext(), "密码输入不一致", 0).show();
return;
}
Editor editor = sp.edit();//存储密码
editor.putString("password", Md5Utils.encode(pwd));
editor.commit();
dialog.dismiss();
showEnterPwdDialog();
}
});
dialog.setView(view,0,0,0,0);
dialog.show();
}
3.已经设置了密码,显示输入密码对话框
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:background="#ffffff"
android:gravity="center_horizontal"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="50dp"
android:background="#8866ff00"
android:gravity="center"
android:text="请输入密码"
android:textColor="#000000"
android:textSize="20sp" />
<EditText
android:textColor="#000000"
android:id="@+id/et_pwd"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="请输入密码"
android:inputType="textPassword" />
<LinearLayout
android:layout_width="300dp"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal" >
<Button
android:id="@+id/bt_ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/btn_selector"
android:text="确定"
android:textColor="#000000" />
<Button
android:id="@+id/bt_cancle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"
android:background="@drawable/btn_selector"
android:text="取消"
android:textColor="#000000" />
</LinearLayout>
</LinearLayout>
加载该xml文件
/**
* 显示输入密码对话框
*/
protected void showEnterPwdDialog() {
// TODO Auto-generated method stub
AlertDialog.Builder builder = new Builder(this);
View view = View.inflate(getApplicationContext(),
R.layout.dialog_enter_pwd, null);
final AlertDialog dialog = builder.create();
//加载控件
et_pwd = (EditText) view.findViewById(R.id.et_pwd);
bt_ok = (Button) view.findViewById(R.id.bt_ok);
bt_cancle = (Button) view.findViewById(R.id.bt_cancle);
bt_cancle.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
bt_ok.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
String pwd = et_pwd.getText().toString().trim();
if(TextUtils.isEmpty(pwd)){
Toast.makeText(getApplicationContext(), "密码不能为空", 0).show();
return;
}
String save_pwd = sp.getString("password", "");//验证密码
if(save_pwd.equals(Md5Utils.encode(pwd))){
dialog.dismiss();
Intent intent = new Intent(HomeActivity.this,LostFindActivity.class);
startActivity(intent);
}else {
Toast.makeText(getApplicationContext(), "密码输入有误", 0).show();
}
}
});
dialog.setView(view,0,0,0,0);
dialog.show();
}
4.密码的md5加密
在工具包utils中定义一个Md5Utils类,创建方法对密码进行md5加密
public class Md5Utils {
/**
* md5 加密
* @param text
* @return
*/
public static String encode(String text){
try {
MessageDigest digester = MessageDigest.getInstance("MD5");
byte[] result = digester.digest(text.getBytes());
StringBuffer buffer = new StringBuffer();
for(byte b:result){
int num = b&0xff;
String hexStr = Integer.toHexString(num);
if(hexStr.length()==1){
buffer.append("0");
}
buffer.append(hexStr);
}
return buffer.toString();
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "";
}
}
}
5.入对话框页面
对主界面的gridview控件做响应处理
gv_home.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// TODO Auto-generated method stub
switch (position) {
case 0:
if (isSetupPwd()) {
// 进入输入密码对话框
showEnterPwdDialog();
} else {
// 进入设置密码对话框
showSetupPwdDialog();
}
break;
case 8:
Intent intent = new Intent(HomeActivity.this,SettingActivity.class);
startActivity(intent);
break;
}
}
});
二.建立手机防盗引导页面
1.activity_setup1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
style="@style/text_tile_style"
android:text="1.欢迎使用手机防盗"/>
<TextView style="@style/text_content_style"
android:textSize="20sp"
android:text="您的手机防盗卫士:"/>
<TextView
android:drawableLeft="@drawable/btn_rating_star_on_focused_holo_dark"
style="@style/text_content_style"
android:text="SIM卡变更报警"/>
<TextView
android:drawableLeft="@drawable/btn_rating_star_on_focused_holo_dark"
style="@style/text_content_style"
android:text="GPS追踪"/>
<TextView
android:drawableLeft="@drawable/btn_rating_star_on_focused_holo_dark"
style="@style/text_content_style"
android:text="远程锁屏"/>
<TextView
android:drawableLeft="@drawable/btn_rating_star_on_focused_holo_dark"
style="@style/text_content_style"
android:text="远程销毁"/>
<LinearLayout
android:layout_marginTop="50dp"
android:gravity="center_horizontal"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/presence_online"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/presence_invisible"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/presence_invisible"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/presence_invisible"/>
</LinearLayout>
<RelativeLayout android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/setup1"/>
<Button
android:onClick="next"
android:padding="8dp"
android:background="@drawable/btn_selector"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="下一步"
android:drawableRight="@drawable/next"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
/>
</RelativeLayout>
</LinearLayout>
2.activity_setup2.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
style="@style/text_tile_style"
android:text="2.手机卡的绑定" />
<TextView
style="@style/text_content_style"
android:text="通过绑定SIM卡:" />
<TextView
android:layout_marginTop="15dp"
style="@style/text_content_style"
android:text="下次重启手机\n如果发现SIM卡变化就会发送报警短信" />
<RelativeLayout
android:layout_marginTop="50dp"
android:onClick="bindSim"
android:clickable="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/btn_selector" >
<TextView
android:id="@+id/tv_setup2_content"
style="@style/text_content_style"
android:layout_centerVertical="true"
android:background="@android:color/transparent"
android:text="点击绑定SIM卡" />
<ImageView
android:padding="5dp"
android:id="@+id/iv_setup2_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:src="@drawable/unlock" />
</RelativeLayout>
<LinearLayout
android:layout_marginTop="50dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/presence_invisible" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/presence_online" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/presence_invisible" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/presence_invisible" />
</LinearLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/bind" />
<Button
android:onClick="next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:background="@drawable/btn_selector"
android:drawableRight="@drawable/next"
android:text="下一步" />
<Button
android:onClick="pre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:background="@drawable/btn_selector"
android:drawableLeft="@drawable/previous"
android:text="上一步" />
</RelativeLayout>
</LinearLayout>
3.activity_setup3.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
style="@style/text_tile_style"
android:text="3.设置安全号码" />
<TextView
style="@style/text_content_style"
android:text="SIM卡更换后:" />
<TextView
style="@style/text_content_style"
android:text="报警短信会发送给安全号码" />
<EditText
android:layout_marginTop="15dp"
android:id="@+id/et_phone"
android:inputType="phone"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="请输入号码" />
<Button
android:layout_marginTop="15dp"
android:onClick="selectContact"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/btn_selector"
android:text="选择联系人" />
<LinearLayout
android:layout_marginTop="50dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/presence_invisible" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/presence_invisible" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/presence_online" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/presence_invisible" />
</LinearLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/phone" />
<Button
android:onClick="next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:background="@drawable/btn_selector"
android:drawableRight="@drawable/next"
android:text="下一步" />
<Button
android:onClick="pre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:background="@drawable/btn_selector"
android:drawableLeft="@drawable/previous"
android:text="上一步" />
</RelativeLayout>
</LinearLayout>
4. activity_setup4.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:swust="http://schemas.android.com/apk/res/com.swust.mobilesafe"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
style="@style/text_tile_style"
android:text="4.恭喜您,设置完成" />
<TextView
style="@style/text_content_style"
android:text="强烈建议您开启防盗保护:" />
<com.swust.mobilesafe.ui.SettingView
android:layout_marginTop="20dp"
android:id="@+id/sv_lost"
swust:title="防盗保护"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<LinearLayout
android:layout_marginTop="50dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="horizontal" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/presence_invisible" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/presence_invisible" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/presence_invisible" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:drawable/presence_online" />
</LinearLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:src="@drawable/phone" />
<Button
android:onClick="next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:background="@drawable/btn_selector"
android:drawableRight="@drawable/next"
android:text="设置完成" />
<Button
android:onClick="pre"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:background="@drawable/btn_selector"
android:drawableLeft="@drawable/previous"
android:text="上一步" />
</RelativeLayout>
</LinearLayout>
5. 自定义样式
<style name="text_tile_style">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">60dp</item>
<item name="android:background">@android:color/holo_green_light</item>
<item name="android:gravity">center</item>
<item name="android:textSize">22sp</item>
<item name="android:textColor">#000000</item>
</style>
<style name="activity_title_style" parent="text_tile_style">
<item name="android:background">@android:color/holo_blue_light</item>
</style>
<style name="text_content_style">
<item name="android:gravity">center_vertical</item>
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textSize">18sp</item>
<item name="android:textColor">#000000</item>
<item name="android:layout_marginLeft">5dp</item>
<item name="android:layout_marginTop">5dp</item>
</style>
三.建立Activity类加载xml并处处理
1.创建一个基类BaseSetupActivity
四个界面有很多地方类似,如上一步、下一步等可以抽取出来
public abstract class BaseSetupActivity extends Activity {
public SharedPreferences sp;
//声明一个手势识别器
private GestureDetector mGestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//初始化手势识别器
mGestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener(){
//当手指在屏幕上快速滑动的时候
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, float velocityY) {
// TODO Auto-generated method stub
if(Math.abs(velocityX)<100 || Math.abs(velocityX)<100){
return true;
}
if((e2.getRawX()-e1.getRawX())>200){
pre(null);
return true;
}
if((e1.getRawX()-e2.getRawX())>200){
next(null);
return true;
}
return super.onFling(e1, e2, velocityX, velocityY);
}
});
sp = getSharedPreferences("config", MODE_PRIVATE);
initView();
}
//让手势识别器生效
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
mGestureDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}
/**
* 初始化界面的view
*/
public abstract void initView();
/**
* 下一步
*/
public abstract void next(View view);
/**
* 上一步
* @param view
*/
public abstract void pre(View view);
}
2.Setup1Activity
public class Setup1Activity extends BaseSetupActivity {
@Override
public void initView() {
// TODO Auto-generated method stub
setContentView(R.layout.activity_setup1);
}
@Override
public void next(View view) {
// TODO Auto-generated method stub
Intent intent = new Intent(this,Setup2Activity.class);
startActivity(intent);
overridePendingTransition(R.anim.tran_next_in, R.anim.tran_next_out);
finish();
}
@Override
public void pre(View view) {
// TODO Auto-generated method stub
}
}
3.Setup2Activity
public class Setup2Activity extends BaseSetupActivity {
private TelephonyManager tm;
private ImageView iv_setup2_status;
private TextView tv_setup2_content;
@Override
public void initView() {
// TODO Auto-generated method stub
setContentView(R.layout.activity_setup2);
iv_setup2_status = (ImageView) findViewById(R.id.iv_setup2_status);
tv_setup2_content = (TextView) findViewById(R.id.tv_setup2_content);
String saveSim = sp.getString("sim", null);
if (TextUtils.isEmpty(saveSim)) {
iv_setup2_status.setImageResource(R.drawable.unlock);
tv_setup2_content.setText("未绑定,点击可绑定SIM卡");
}else {
iv_setup2_status.setImageResource(R.drawable.lock);
tv_setup2_content.setText("已绑定,点击可解除绑定SIM卡");
}
}
@Override
public void next(View view) {
// TODO Auto-generated method stub
Intent intent = new Intent(this, Setup3Activity.class);
startActivity(intent);
finish();
overridePendingTransition(R.anim.tran_next_in, R.anim.tran_next_out);
}
@Override
public void pre(View view) {
// TODO Auto-generated method stub
Intent intent = new Intent(this, Setup1Activity.class);
startActivity(intent);
overridePendingTransition(R.anim.tran_pre_in, R.anim.tran_pre_out);
finish();
}
/**
* 绑定SIM卡
*
* @param view
*/
public void bindSim(View view) {
String saveSim = sp.getString("sim", null);
if (TextUtils.isEmpty(saveSim)) {
// 获取手机系统里面的电话管理服务
tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
String sim = tm.getSimSerialNumber();//获取sim卡串号
Editor editor = sp.edit();
editor.putString("sim", sim);
editor.commit();
tv_setup2_content.setText("已绑定,点击可解除绑定SIM卡");
iv_setup2_status.setImageResource(R.drawable.lock);
}
else {
Editor editor = sp.edit();
editor.putString("sim", null);
editor.commit();
tv_setup2_content.setText("未绑定,点击可绑定SIM卡");
iv_setup2_status.setImageResource(R.drawable.unlock);
}
}
}
4.Setup3Activity
public class Setup3Activity extends BaseSetupActivity {
private EditText et_phone;
private String safenumber;
private String safecontact;
@Override
public void initView() {
// TODO Auto-generated method stub
setContentView(R.layout.activity_setup3);
et_phone = (EditText) findViewById(R.id.et_phone);
safenumber = sp.getString("safenumber", "");
safecontact = sp.getString("safecontact", "");
et_phone.setText(safecontact);
}
@Override
public void next(View view) {
// TODO Auto-generated method stub
safecontact = et_phone.getText().toString().trim();
if(TextUtils.isEmpty(safecontact)){
Toast.makeText(getApplicationContext(), "安全号码不能为空", 0).show();
return;
}
Editor editor = sp.edit();
editor.putString("safenumber", safenumber);
editor.putString("safecontact", safecontact);
editor.commit();
Intent intent = new Intent(this,Setup4Activity.class);
startActivity(intent);
overridePendingTransition(R.anim.tran_next_in, R.anim.tran_next_out);
finish();
}
@Override
public void pre(View view) {
// TODO Auto-generated method stub
Intent intent = new Intent(this,Setup2Activity.class);
startActivity(intent);
finish();
overridePendingTransition(R.anim.tran_pre_in, R.anim.tran_pre_out);
}
/**
* 选择联系人
* @param view
*/
public void selectContact(View view){
Intent intent = new Intent(this,SelectContactActivity.class);
startActivityForResult(intent, 0);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if(data!=null){
safenumber = data.getStringExtra("phone");
safecontact = data.getStringExtra("contact");
et_phone.setText(safecontact);
}
super.onActivityResult(requestCode, resultCode, data);
}
}
5.Setup4Activity
public class Setup4Activity extends BaseSetupActivity {
private SettingView sv_lost;
@Override
public void initView() {
// TODO Auto-generated method stub
setContentView(R.layout.activity_setup4);
sv_lost = (SettingView) findViewById(R.id.sv_lost);
sv_lost.setchecked(sp.getBoolean("protecting", false));
sv_lost.tb_switch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
Editor editor = sp.edit();
editor.putBoolean("protecting", isChecked);
editor.commit();
}
});
}
@Override
public void next(View view) {
// TODO Auto-generated method stub
Editor editor = sp.edit();
editor.putBoolean("configed", true);
editor.commit();
Intent intent = new Intent(this,LostFindActivity.class);
startActivity(intent);
overridePendingTransition(R.anim.tran_next_in, R.anim.tran_next_out);
finish();
}
@Override
public void pre(View view) {
// TODO Auto-generated method stub
Intent intent = new Intent(this,Setup3Activity.class);
startActivity(intent);
finish();
overridePendingTransition(R.anim.tran_pre_in, R.anim.tran_pre_out);
}
}
四.页面中的相关处理
1.Activity切换效果
在res->anim中建立xml,共四个,分别为tran_next_in.xml、tran_next_out.xml、tran_pre_in.xml、tran_pre_out.xml
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="100%p"
android:fromYDelta="0"
android:toXDelta="0"
android:duration="300"
android:toYDelta="0" >
</translate>
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="-100%p"
android:duration="300"
android:toYDelta="0" >
</translate>
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="-100%p"
android:fromYDelta="0"
android:toXDelta="0"
android:duration="300"
android:toYDelta="0" >
</translate>
<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="0"
android:fromYDelta="0"
android:toXDelta="100%p"
android:duration="300"
android:toYDelta="0" >
</translate>
然后在页面切换next函数中加入
overridePendingTransition(R.anim.tran_next_in, R.anim.tran_next_out);
在pre函数中加入
overridePendingTransition(R.anim.tran_pre_in, R.anim.tran_pre_out);
注意:必须在startActivity(intent); 或者 finish() 函数后加入才有效果
2.列出手机联系人
(1)界面布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".SplashActivity" >
<TextView
style="@style/activity_title_style"
android:text="选择联系人"/>
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/lv_contacts">
</ListView>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:gravity="center_vertical"
android:layout_marginLeft="15dp"
android:layout_marginTop="5dp"
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="姓名"
android:textColor="#000000"
/>
<TextView
android:layout_marginLeft="15dp"
android:layout_marginTop="5dp"
android:id="@+id/tv_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="15sp"
android:text="15508061731"
android:textColor="#88000000"
/>
</LinearLayout>
(2)domain包下定义手机联系人类
/**
* 手机联系人信息
* @author Thinkpad
*
*/
public class ContactInfo {
private String name;
private String phone;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
(3)engin包下建立ContactInfoProvider实现联系人获取
public class ContactInfoProvider {
/**
* 查询获取系统里的全部联系人信息
*
* @return
*/
public static List<ContactInfo> getContactInfo(Context context) {
String[] PHONES_PROJECTION = new String[] {
Phone.DISPLAY_NAME, Phone.NUMBER};
List<ContactInfo> contacts = new ArrayList<ContactInfo>();
ContentResolver resolver = context.getContentResolver();
Cursor cursor = resolver.query(Phone.CONTENT_URI, PHONES_PROJECTION,
null, null, null);
while (cursor.moveToNext()) {
// 得到手机号码
String phoneNumber = cursor.getString(1);
if (TextUtils.isEmpty(phoneNumber))
continue;
// 得到联系人名称
String contactName = cursor.getString(0);
ContactInfo info = new ContactInfo();
info.setName(contactName);
info.setPhone(phoneNumber);
contacts.add(info);
}
cursor.close();
return contacts;
}
}
(4)加载联系人的xml页面
public class SelectContactActivity extends Activity {
private ListView lv_contacts;
private List<ContactInfo> infos;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_select_contacts);
lv_contacts = (ListView) findViewById(R.id.lv_contacts);
infos = ContactInfoProvider.getContactInfo(this);
lv_contacts.setAdapter(new contactinfoAdapter());//为listview建立适配器
lv_contacts.setOnItemClickListener(new OnItemClickListener() {//listview中选中项的处理
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
String phone = infos.get(position).getPhone();
String name = infos.get(position).getName();
Intent data = new Intent();
data.putExtra("contact", name+"("+phone+")");
data.putExtra("phone", phone);
setResult(0, data);
finish();
}
});
}
private class contactinfoAdapter extends BaseAdapter{
@Override
public int getCount() {
// TODO Auto-generated method stub
return infos.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View view = View.inflate(getApplicationContext(), R.layout.contact_list_item, null);
TextView tv_name = (TextView) view.findViewById(R.id.tv_name);
TextView tv_phone = (TextView) view.findViewById(R.id.tv_phone);
tv_name.setText(infos.get(position).getName());
tv_phone.setText(infos.get(position).getPhone());
return view;
}
}
}
3.简单的手势操作
public abstract class BaseSetupActivity extends Activity {
public SharedPreferences sp;
//声明一个手势识别器
private GestureDetector mGestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//初始化手势识别器
mGestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener(){
//当手指在屏幕上快速滑动的时候
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, float velocityY) {
// TODO Auto-generated method stub
if(Math.abs(velocityX)<100 || Math.abs(velocityX)<100){
return true;
}
if((e2.getRawX()-e1.getRawX())>200){
pre(null);
return true;
}
if((e1.getRawX()-e2.getRawX())>200){
next(null);
return true;
}
return super.onFling(e1, e2, velocityX, velocityY);
}
});
sp = getSharedPreferences("config", MODE_PRIVATE);
initView();
}
//让手势识别器生效
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
mGestureDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}