Android實戰(zhàn)--遠程操控安卓手機

又到了實戰(zhàn)的時候了搓谆,這次我們來玩遠程操控安卓手機炒辉。
市面上流行了很多安全衛(wèi)士軟件,它們都擁有遠程操控手機的功能泉手,如播放報警鈴聲黔寇,獲取手機位置等等,這次我們就來看看怎么實現這些功能斩萌。

報警鈴聲的實現

說起所有的遠程操控的功能中缝裤,就屬于報警鈴聲最容易實現了,所以我們先實現這個术裸。

首先建立一個Android project

然后建立一個SmsReceive廣播接收者倘是,沒錯,就是這個袭艺,我們的目的就是使用廣播接收者接收到短信搀崭,然后通過解析短信的內容來遠程操控手機。
SmsReceive代碼:

public class SmsReceive extends BroadcastReceiver {
    @Override
public void onReceive(Context context, Intent intent) {
        
}
}

那么如何才能解析短信呢猾编?這其實非常簡單瘤睹,只要用以下幾行代碼就行了

Object[] objs = (Object[]) intent.getExtras().get("pdus");
    for (Object obj : objs) {
        // 獲得短信內容
        SmsMessage sms = SmsMessage.createFromPdu((byte[]) obj); // 此方法已過時
        String smsbody = sms.getMessageBody();
        String sender = sms.getOriginatingAddress();
        System.out.println("發(fā)件人:" + sender + "  內容:" + smsbody);
}

我們將這段解析短信的代碼加入SmsReceive廣播接收者的onReceive()方法之中,這時我們就可以監(jiān)聽到短信的信息了答倡!
但是且慢轰传,我們還必須在mainfest中注冊廣播接收者才能生效,要時刻牢記Android四大組件都是必須要注冊才能生效的瘪撇。

        <receiver android:name="com.example.controldevice.SmsReceive" >
        <intent-filter android:priority="1000" >
            <!-- 獲取短信接收事件 -->
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
    </receiver>

另外获茬,接收短信是屬于用戶的隱私,所以還需要添加權限倔既,如下:

<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />

OK恕曲,這時候我們就已經成功的監(jiān)聽到了短信了,夠簡單吧渤涌!現在就打開模擬器嘗試著發(fā)一條短信看看有沒有輸出吧佩谣!

前期準備工作已經完成,那么我們就來操控報警短信吧实蓬。
在SmsReceive廣播接收者的onReceive()方法中添加以下代碼:

public void onReceive(Context context, Intent intent) {

    Object[] objs = (Object[]) intent.getExtras().get("pdus");
    ······
        System.out.println("發(fā)件人:" + sender + "  內容:" + smsbody);
        
        if ("#*music*#".equals(smsbody)){
            System.out.println("快點播放音樂");
            // 播放音樂
            MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.bestfriend); // 在res目錄下的raw文件夾添加bestfriend的歌曲
            mediaPlayer.start();
        } 
        }
    }
}

妥妥的茸俭,現在當你發(fā)送"#music#到你的模擬器時,廣播接收者就會解析短信安皱,然后播放報警鈴聲调鬓。
真的是很簡單的一個項目呀~~~
哎,不要吐槽酌伊,我們只是先來一點簡單的東西但開胃菜袖迎,剩下的就稍微有些難度了。

擦除手機信息 & 遠程鎖屏 (上)

響起報警鈴聲是如此的簡單,那么擦出手機信息辜贵,恢復出廠設置呢托慨?
擦除手機信息和遠程鎖屏屬于手機的危險操作,所以一般情況下是無法使用手機應用直接使用這些功能的暇榴。
這些高危操作都屬于手機管理員的操作,所以我們必須要獲得手機的超級管理員權限才能夠操作婆硬。需要注意的是手機超級管理員與root是不同的,手機超級管理員指的是獲得手機最高的權限谐区,而root則是獲得手機的所有權限宋列。

獲得手機超級管理員權限

手機超級管理員權限是在Android2.3的時候提出來的,它可以設置開屏密碼嘹叫,禁用攝像頭婆芦,鎖屏等等消约,具體可以查看Android官網:
https://developer.android.com/guide/topics/admin/device-admin.html

  • 獲取超級管理員导饲,首先要創(chuàng)建一個Admin類繼承自DeviceAdminReceiver硝岗,當然了,里面可以重寫很多方法胀溺,但是我們現在先不理。代碼如下:

     public class Admin extends DeviceAdminReceiver {
    
     }
    
  • 然后我們要在res資源目錄下創(chuàng)建一個xml目錄无埃,在里面創(chuàng)建device_admin_sample.xml。這個文件是用來說明開啟超級管理員后用戶所擁有的權限,代碼如下:

     <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>
    
  • 在manifest中注冊DeviceAdminReceiver蒲稳,添加代碼如下:

          <receiver
          android:name="com.example.controldevice.Admin"
          android:description="@string/sample_device_admin_description"
          android:label="@string/sample_device_admin"
          android:permission="android.permission.BIND_DEVICE_ADMIN" >
          <meta-data
              android:name="android.app.device_admin"
              android:resource="@xml/device_admin_sample" />
    
          <intent-filter>
              <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
          </intent-filter>
      </receiver>
    

前置工作已經完成了诉植,我們就來正式獲取管理員權限吧舌稀。
我們在MainActivity中添加兩個按鈕剔应,一個register按鈕席怪,點擊打開激活超級管理員權限孽锥,另一個unregister按鈕疫赎,點擊取消激活超級管理員權限抵卫。
要注意的是如果激活了超級管理員權限胎撇,那么以后是不能夠直接卸載這個app的介粘,必須要取消激活超級管理員權限之后才能正常卸載姻采。
MainActivity代碼如下:

public class MainActivity extends Activity {
private DevicePolicyManager devicePolicyManager;
private ComponentName componentName;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    devicePolicyManager = (DevicePolicyManager) getSystemService(DEVICE_POLICY_SERVICE);
    componentName = new ComponentName(this, Admin.class);
    Button register = (Button) findViewById(R.id.register);
    register.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // Launch the activity to have the user enable our admin.
            Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
            intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, componentName);
            intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,
                    "激活超級管理員中");
            startActivity(intent);
        }
    });
    Button unregister = (Button) findViewById(R.id.unregister);
    unregister.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // 取消激活超級管理員
            if (devicePolicyManager.isAdminActive(componentName)){
                devicePolicyManager.removeActiveAdmin(componentName);
            }
        }
    });
}
}

在這里我們遇到兩個陌生的API宝鼓,一個是DevicePolicyManager沥寥,這個是設備權限管理器蒂阱,使用它才能夠管理鎖屏锻全、擦出手機數據等等功能。另一個是ComponentName录煤,它用于打開其他應用程序中的Activity或服務的了嚎,因為啟動超級管理員權限是要啟動Android內置Activity才能激活的,所以需要使用ComponentName廊营。
但我們點擊register按鈕的時候歪泳,app會直接打開另一個活動,不要慌露筒,這是正衬派。現象,點擊Activate激活即可激活超級管理員慎式,界面如下

supermanager.png

當然了伶氢,這是用代碼的方法來激活超級管理員,你也可以直接在設置中激活瘪吏,方法是:Settings-security-Device administrators-我們的app癣防。
要注意的是只有繼承了DeviceAdminReceiver,以及在manifest注冊過之后才會出現我們創(chuàng)建的app掌眠。

擦除手機信息 & 遠程鎖屏 (下)

現在我們終于可以遠程擦除手機信息和遠程鎖屏了蕾盯!回到我們的SmsReceive,繼續(xù)在onReceive()中添加代碼:

public class SmsReceive extends BroadcastReceiver {
private DevicePolicyManager mDevicePolicyManager;
private ComponentName mComponentName;

@Override
public void onReceive(Context context, Intent intent) {
    
    mDevicePolicyManager = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
    mComponentName = new ComponentName(context, Admin.class);
    
    Object[] objs = (Object[]) intent.getExtras().get("pdus");
    for (Object obj : objs) {
        // 獲得短信內容
        SmsMessage sms = SmsMessage.createFromPdu((byte[]) obj);
        String smsbody = sms.getMessageBody();
        String sender = sms.getOriginatingAddress();
        System.out.println("發(fā)件人:" + sender + "  內容:" + smsbody);
        
        if ("#*music*#".equals(smsbody)){               
            // 播放音樂
            MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.bestfriend);
            mediaPlayer.start();
        } else if ("#*wipedata*#".equals(smsbody)){
            // 擦出手機數據
            if(mDevicePolicyManager.isAdminActive(mComponentName)) {
                mDevicePolicyManager.wipeData(0);
            }
        } else if ("#*lock*#".equals(smsbody)){
            // 鎖屏
            if (mDevicePolicyManager.isAdminActive(mComponentName)){
                mDevicePolicyManager.lockNow();
            }
        }
        
    }
}
}

這時候你發(fā)送短信#wipedata#或者#lock#就能實現遠程擦除數據和鎖屏了。
不過需要提示的是擦出數據在模擬器中不太好用扇救,有可能會導致模擬器卡死刑枝,還有小心在真機測試,這可真是會恢復出廠設置的迅腔。

總結

這次的實戰(zhàn)課程就到這里為止了装畅,由于內容并不復雜,也就不上傳項目到github中了沧烈。
這個項目要注意的有:
1掠兄、想要解析短信,必須要短信的廣播接收者中添加

        <intent-filter>
            <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
        </intent-filter>

否則app是無法接收到短信的锌雀。當然了蚂夕,添加用戶權限也是必須的。
2腋逆、獲取超級管理員權限婿牍,這需要三部走,

  • 要繼承DeviceAdminReceiver惩歉,然后在mainfest中注冊
  • 要在xml中寫入獲取超級管理員中能獲取的權限
  • 通過代碼或者直接在設置中激活超級管理員等脂。
    以上就是這篇文章的全部內容
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末俏蛮,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子上遥,更是在濱河造成了極大的恐慌搏屑,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粉楚,死亡現場離奇詭異辣恋,居然都是意外死亡,警方通過查閱死者的電腦和手機模软,發(fā)現死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門伟骨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人撵摆,你說我怎么就攤上這事底靠。” “怎么了特铝?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵暑中,是天一觀的道長。 經常有香客問我鲫剿,道長鳄逾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任灵莲,我火速辦了婚禮雕凹,結果婚禮上,老公的妹妹穿的比我還像新娘政冻。我一直安慰自己枚抵,他們只是感情好,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布明场。 她就那樣靜靜地躺著汽摹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪苦锨。 梳的紋絲不亂的頭發(fā)上逼泣,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音舟舒,去河邊找鬼拉庶。 笑死,一個胖子當著我的面吹牛秃励,可吹牛的內容都是我干的氏仗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼夺鲜,長吁一口氣:“原來是場噩夢啊……” “哼皆尔!你這毒婦竟也來了帚稠?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤床佳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后榄审,有當地人在樹林里發(fā)現了一具尸體砌们,經...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年搁进,在試婚紗的時候發(fā)現自己被綠了浪感。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡饼问,死狀恐怖影兽,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情莱革,我是刑警寧澤峻堰,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站盅视,受9級特大地震影響捐名,放射性物質發(fā)生泄漏。R本人自食惡果不足惜闹击,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一镶蹋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赏半,春花似錦兵多、人聲如沸佳谦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽奠涌。三九已至,卻和暖如春穷蛹,著一層夾襖步出監(jiān)牢的瞬間偶惠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工光坝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留尸诽,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓盯另,卻偏偏與公主長得像性含,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鸳惯,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,098評論 25 707
  • 在Android的設計中商蕴,資源的訪問或者網絡連接叠萍,要得到這些服務都需要聲明其訪問權限,否則將無法正常工作绪商。在And...
    a2bfbb8a095f閱讀 24,943評論 6 73
  • 前言:權限是一種安全機制苛谷。Android權限主要用于限制應用程序內部某些具有限制性特性的功能使用以及應用程序之間的...
    AlicFeng閱讀 3,064評論 0 15
  • android.permission.EXPAND_STATUS_BAR 允許一個程序擴展收縮在狀態(tài)欄,andro...
    pyyy閱讀 3,634評論 1 17
  • 持續(xù)分享28天,20170809格郁。張紅腹殿。 今天碰到一個朋友,很熱情的邀請我去她新租的房子看看例书。 看得出房子...
    啊呦a7_94閱讀 140評論 0 0