安卓_手机卫士_第四天(sharp形状资源,使用手势切换页面,监听开机广播)

安卓手机卫士第四天


防盗首页构建

页面效果
这里写图片描述

自定义背景图(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);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/opopopwqwqwq/article/details/79534130
今日推荐