又到了實戰(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激活即可激活超級管理員慎式,界面如下
當然了伶氢,這是用代碼的方法來激活超級管理員,你也可以直接在設置中激活瘪吏,方法是: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中寫入獲取超級管理員中能獲取的權限
- 通過代碼或者直接在設置中激活超級管理員等脂。
以上就是這篇文章的全部內容