安卓手机卫士第四天
防盗首页构建
页面效果
自定义背景图(sharp形状资源)
- 通过shape形状资源,我们可以自定义控件的形状和颜色
- 该控件在布局文件中其实就是TextView加上我们自定义的背景样式
创建使用步骤:
首先,drawable目录下创建gradient_box.xml文件,该文件就是shape文件
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<!-- 梯度,颜色的渐变效果 -->
<gradient
android:angle="45"
android:endColor="#FF0000"
android:startColor="#0000ff" />
<!-- 间距 -->
<padding
android:bottom="7dp"
android:left="7dp"
android:right="7dp"
android:top="7dp" />
<!-- 圆角 -->
<corners android:radius="8dp" />
</shape>
然后创建点击变化效果的selector
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/gradient_box_press" android:state_pressed="true"/>
<!-- pressed -->
<item android:drawable="@drawable/gradient_box_press" android:state_focused="true"/>
<!-- focused -->
<item android:drawable="@drawable/gradient_box"/>
<!-- default -->
</selector>
最后,在texview的background属性使用selector即可,
ps:textview需要实现点击事件监听才可以实现切换效果
<TextView
android:background="@drawable/shape_selected"
android:clickable="true"
android:onClick="reEntrySetting"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:text="重新进入设置向导"
android:textSize="16sp" />
使用手势实现页面的切换
图解分析
实现步骤:
首先,activity要覆写onTouchEvent(MotionEvent event)
然后使用手势检测者GestureDetector的onTouchEvent
分析监测触摸事件
GestureDetector的对象要覆写onFling(MotionEvent e1, MotionEvent e2,float velocityX, float velocityY)
方法
抽取BaseSetupActivity
抽取每页重复的手势换页与点击按钮换页
代码
public abstract class BaseSetupActivity extends Activity {
private GestureDetector gestureDetector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//2,创建手势管理的对象,用作管理在onTouchEvent(event)传递过来的手势动作
gestureDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener(){
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, float velocityY) {
//监听手势的移动
if(e1.getX()-e2.getX()>0){
//调用子类的下一页方法,抽象方法
//在第一个界面上的时候,跳转到第二个界面
//在第二个界面上的时候,跳转到第三个界面
//.......
showNextPage();
}
if(e1.getX()-e2.getX()<0){
//调用子类的上一页方法
//在第一个界面上的时候,无响应,空实现
//在第二个界面上的时候,跳转到第1个界面
//.......
showPrePage();
}
return super.onFling(e1, e2, velocityX, velocityY);
}
});
}
//1,监听屏幕上响应的事件类型(按下(1次),移动(多次),抬起(1次))
@Override
public boolean onTouchEvent(MotionEvent event) {
//3,通过手势处理类,接收多种类型的事件,用作处理
gestureDetector.onTouchEvent(event);
return super.onTouchEvent(event);
}
//下一页的抽象方法,由子类决定具体跳转到那个界面
protected abstract void showNextPage();
//上一页的抽象方法,由子类决定具体跳转到那个界面
protected abstract void showPrePage();
//点击下一页按钮的时候,根据子类的showNextPage方法做相应跳转
public void nextPage(View view){
showNextPage();
}
//点击上一页按钮的时候,根据子类的showPrePage方法做相应跳转
public void prePage(View view){
showPrePage();
}
}
监听开机广播
监听开机广播,判断绑定的sim卡是否更换,发送短信给绑定安全手机号
- 权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
- 注册开机广播接收者
<receiver android:name="com.itheima.mobilesafe74.receiver.BootReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
- 开机广播接收者代码
public class BootReceiver extends BroadcastReceiver {
private static final String tag = "BootReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(tag, "重启手机成功了,并且监听到了相应的广播......");
//1,获取开机后手机的sim卡的序列号
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String simSerialNumber = tm.getSimSerialNumber()+"xxx";
//2,sp中存储的序列卡号
String sim_number = SpUtil.getString(context,ConstantValue.SIM_NUMBER, "");
//3,比对不一致
if(!simSerialNumber.equals(sim_number)){
//4,发送短信给选中联系人号码
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage("5556", null, "sim change!!!", null, null);
}
}
}