天天看點

手機衛士11-手機鎖屏和出廠恢複功能

有些不知道怎麼用我們這個鎖屏的功能 ,其實很簡單的,我們隻要把服務 開啟了,然後如果 你要進行鎖屏,那麼就可以通過 另一台手機,發送一條鎖屏的短信如:

#*lockscreen*#

複制代碼

就會鎖屏的啦,具體服務 怎麼開,就要看看我們前面的内容 啦!

好啦,我們今天就來繼續我們的手機防盜啊,今天我們應該就會把手機防盜這個功能全部完成它的啦,

昨天我們已經講了怎樣發送短信指令啦,今天我們就繼續完善這個短信指令啦,就是增加鎖屏操作啊,還有恢複到出廠模式啦,還有一個就是播放報警音樂啦

還有最重要的一個,我們要做一個流氓軟體,沒錯,就是要做一個流氓軟體,其實也不是啦,就是讓一般的使用者不知道怎樣解除安裝我們的軟體而已,是以當小偷偷到了我們的手機,也無法解除安裝掉我們的軟體。

其實我們今天要講的就是通過拿到系統硬體的一些對象,然後進行一些操作,這些都是android已經封裝好的啦,都在api文檔裡面有說的

我先告訴大家在那裡找到,然後以後大家也可以多點去看一下那個文檔啦

手機衛士11-手機鎖屏和出廠恢複功能

它其實也就是在那個devicepolicies裡面

這裡面的東西大家都可以看一下

好啦,我們現在就要開始寫代碼啦,首先我們要建立一個receiver來接收廣播,但這個receiver繼承的不是broadcastreceiver而是deviceadminreceiver

但是,從本質上來講deviceadminreceiver也是繼承了broadcastreceiver的

com.xiaobin.security.receiver.myadminreceiver

package com.xiaobin.security.receiver;

import android.app.admin.deviceadminreceiver;

public class myadminreceiver extends deviceadminreceiver

{

}

這個類很簡單,我們什麼都不用幹,但是我們還是要把它注冊到androidmanifest裡面去的,但是我們先不注冊,我們還要在res目錄下面建立一個目錄名為xml然後在xml裡面建立一個xml檔案,然後寫上下面的内容myadmin.xml

<?xml version="1.0" encoding="utf-8"?>

<device-admin xmlns:android="http://schemas.android.com/apk/res/android" >

    <uses-policies>

        <limit-password />

        <watch-login />

        <reset-password />

        <force-lock />

        <wipe-data />

        <expire-password />

        <encrypted-storage />

        <disable-camera />

    </uses-policies>

</device-admin>

其實這個xml就是定義一些裝置的資訊而已,大家看那個名字也可以知道有什麼用的啦,是以隻要照着寫就行啦

好啦,現在,這個xml檔案寫好之後,我們就可以去androidmanifest裡面注冊我們剛剛寫的receiver啦

        <receiver 

            android:name="com.xiaobin.security.receiver.myadminreceiver">

                    <meta-data android:name="android.app.device_admin"

                            android:resource="@xml/myadmin" />

                    <intent-filter>

                        <action android:name="android.app.action.device_admin_enabled" />

                    </intent-filter>

                </receiver>

可以看到它多了一個<meta-data>的節點,這個節點就是指定我們剛剛寫的xml檔案的好啦,現在初始化工作,我們就完成的差不多啦,現在我們就要反邏輯加上去啦,我們就要在設定向導設定完成的時候進行裝置的激活啦,也就是加入幾行代碼而已

                //拿到一個裝置管理器

                devicepolicymanager devicepolicymanager = (devicepolicymanager) getsystemservice(context.device_policy_service);

                //new一個新的元件出來,用來啟動注冊管理器的界面

                componentname componentname = new componentname(this, myadminreceiver.class);

                //判斷是否已經注冊,沒有就進行注冊

                if(!devicepolicymanager.isadminactive(componentname))

                {

                        intent intent = new intent(devicepolicymanager.action_add_device_admin);

                        intent.putextra(devicepolicymanager.extra_device_admin, componentname);

                        startactivity(intent);

                }

上面的代碼我們都是在設定向導完成的時候做的,也就是在setupguideactivity4裡面完成的,下面是完整的setupguideactivity4這個類的完整代碼com.xiaobin.security.ui.setupguideactivity4

package com.xiaobin.security.ui;

import android.app.activity;

import android.app.alertdialog;

import android.app.admin.devicepolicymanager;

import android.content.componentname;

import android.content.context;

import android.content.dialoginterface;

import android.content.intent;

import android.content.sharedpreferences;

import android.content.sharedpreferences.editor;

import android.os.bundle;

import android.view.view;

import android.view.view.onclicklistener;

import android.widget.button;

import android.widget.checkbox;

import android.widget.compoundbutton;

import android.widget.compoundbutton.oncheckedchangelistener;

import com.xiaobin.security.r;

import com.xiaobin.security.receiver.myadminreceiver;

public class setupguide4activity extends activity implements onclicklistener

        private button bt_pervious;

        private button bt_finish;

        private checkbox cb_protected;

        private sharedpreferences sp;

        @override

        protected void oncreate(bundle savedinstancestate)

        {

                super.oncreate(savedinstancestate);

                setcontentview(r.layout.setup_guide4);

                bt_pervious = (button) findviewbyid(r.id.bt_guide_pervious);

                bt_finish = (button) findviewbyid(r.id.bt_guide_finish);

                bt_finish.setonclicklistener(this);

                bt_pervious.setonclicklistener(this);

                cb_protected = (checkbox) findviewbyid(r.id.cb_guide_protected);

                sp = getsharedpreferences("config", context.mode_private);

                boolean isprotecting = sp.getboolean("isprotected", false);

                if(isprotecting)

                        cb_protected.settext("已經開啟保護");

                        cb_protected.setchecked(true);

                cb_protected.setoncheckedchangelistener(new oncheckedchangelistener()

                        @override

                        public void oncheckedchanged(compoundbutton buttonview, boolean ischecked)

                        {

                                if(ischecked)

                                {

                                        cb_protected.settext("已經開啟保護");

                                        editor editor = sp.edit();

                                        editor.putboolean("isprotected", true);

                                        editor.commit();

                                }

                                else

                                        cb_protected.settext("沒有開啟保護");

                                        editor.putboolean("isprotected", false);

                        }

                });

        }

        public void onclick(view v)

                switch(v.getid())

                        case r.id.bt_guide_finish : 

                                if(cb_protected.ischecked())

                                        finishsetupguide();

                                        finish();

                                        alertdialog.builder builder = new alertdialog.builder(this);

                                        builder.settitle("提醒");

                                        builder.setmessage("強烈建議您開啟保護, 是否完成設定");

                                        builder.setcancelable(false);

                                        builder.setpositivebutton(android.r.string.ok, new dialoginterface.onclicklistener()

                                        {

                                                @override

                                                public void onclick(dialoginterface dialog, int which)

                                                {

                                                        finishsetupguide();

                                                        finish();

                                                }

                                        });

                                        builder.setnegativebutton(android.r.string.no, new dialoginterface.onclicklistener()

                                        builder.create().show();

                                break;

                        case r.id.bt_guide_pervious : 

                                intent intent = new intent(this, setupguide3activity.class);

                                finish();

                                startactivity(intent);

                                //這個是定義activity切換時的動畫效果的

                                overridependingtransition(r.anim.alpha_in, r.anim.alpha_out);

                        default : 

        private void finishsetupguide()

                editor editor = sp.edit();

                editor.putboolean("setupguide", true);//記錄是否已經進行過設定向導了

                editor.commit();

完成到上面之後,我們如果重新運作程式,然後重新進行設定向導的話,當進入到最後一個設定向導,然後點完成的時候,會出現下面激活裝置的界面的

手機衛士11-手機鎖屏和出廠恢複功能

我們激活之後,那就可以進行鎖屏啊,恢複到出廠模式這些操作啦好啦,現在我們就來完善我們的短信指令啦,在處理短信指令那裡進行添加指令啦com.xiaobin.security.receiver.smsreceiver

import com.xiaobin.security.engine.gpsinfoprovider;

import android.content.broadcastreceiver;

import android.media.mediaplayer;

import android.telephony.smsmanager;

import android.telephony.smsmessage;

public class smsreceiver extends broadcastreceiver

        public void onreceive(context context, intent intent)

                object[] pdus = (object[]) intent.getextras().get("pdus");

                for(object pdu : pdus)

                        smsmessage smsmessage = smsmessage.createfrompdu((byte[]) pdu);

                        //拿到短信内容

                        string content = smsmessage.getmessagebody();

                        //拿到發送人的電話号碼

                        string sender = smsmessage.getoriginatingaddress();

                        //這個是通過短信發送指令,然後進行一些操作的

                        if(content.equals("#*location*#"))

                                abortbroadcast();//終止廣播,免得讓小偷看到短信

                                gpsinfoprovider gpsinfoprovider = gpsinfoprovider.getinstance(context);

                                string location = gpsinfoprovider.getlocation();

                                system.out.println(location);

                                if(!location.equals(""))

                                        //發送短信

                                        smsmanager smsmanager = smsmanager.getdefault();

                                        smsmanager.sendtextmessage(sender, null, location, null, null);

                        else if(content.equals("#*lockscreen*#"))

                                devicepolicymanager manager = (devicepolicymanager) context.getsystemservice(context.device_policy_service);

                                //重新設定密碼,第一個參數就是密碼,第二個參數暫時沒有用,但要設定為0

                                manager.resetpassword("123", 0);

                                //進行鎖屏

                                manager.locknow();

                                abortbroadcast();

                        else if(content.equals("#*wipe*#"))

                                //恢複到出廠模式,參數暫時沒有用,但要置為0

                                manager.wipedata(0);

                        else if(content.equals("#*alarm*#"))

                                //這個方法已經調用的prepare這個方法的啦,是以不用自己調用prepare這個方法

                                mediaplayer mediaplayer = mediaplayer.create(context, r.raw.jxmzf);

                                //設定聲音為最大聲

                                mediaplayer.setvolume(1.0f, 1.0f);

                                mediaplayer.start();

從上面的代碼我們可以看到,我們新增了三個指令,就是鎖屏和恢複到出廠模式,還有播放報警音樂,播放報警音樂的音樂我們放到了res/raw下面的啦,如果沒有這個目錄,可以建立一個。到現在為止,我們的這個軟體就可以進行測試一下有沒有效的啦。而且你現在如果想解除安裝我們的這個軟體,你會發現普通的解除安裝方式會解除安裝不了的,這就是我剛開始時候說的流氓軟體啦,其實也沒那麼誇張啦,我們隻是把裝置激活了,是以無法解除安裝而已隻要我們進入到設定,然後去到位置與安全,然後去到選擇裝置,就會看到我們的程式已經在裝置裡面啦,隻要把那個勾去掉,我們的程式就可以解除安裝的啦 

手機衛士11-手機鎖屏和出廠恢複功能
手機衛士11-手機鎖屏和出廠恢複功能
手機衛士11-手機鎖屏和出廠恢複功能

好啦,今天我們講得也差不多的啦,我們的手機防盜這個功能也算是完成的啦,如果大家還有什麼疑問的,也可以留言,我們接下來就會進入到下一個功能的開發的啦,其實上面的短信指令,還可以做很多東西的,大家可以根據自己的需要進行添加多一些指令,好啦,明天我們就繼續新功能的開發,如果有什麼不明白的,可以回頭看一下我們之前的課程。

手機衛士11-手機鎖屏和出廠恢複功能

mb, 下載下傳次數: 227)