Android编程实战--安全卫士(2)

一.设置进入手机防盗的对话框


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);
	}





















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值