有些不知道怎麼用我們這個鎖屏的功能 ,其實很簡單的,我們隻要把服務 開啟了,然後如果 你要進行鎖屏,那麼就可以通過 另一台手機,發送一條鎖屏的短信如:
就會鎖屏的啦,具體服務 怎麼開,就要看看我們前麵的內容 啦!
好啦,我們今天就來繼續我們的手機防盜啊,今天我們應該就會把手機防盜這個功能全部完成它的啦,
昨天我們已經講了怎樣發送短信指令啦,今天我們就繼續完善這個短信指令啦,就是增加鎖屏操作啊,還有恢複到出廠模式啦,還有一個就是播放報警音樂啦
還有最重要的一個,我們要做一個流氓軟件,沒錯,就是要做一個流氓軟件,其實也不是啦,就是讓一般的用戶不知道怎樣卸載我們的軟件而已,所以當小偷偷到了我們的手機,也無法卸載掉我們的軟件。
其實我們今天要講的就是通過拿到係統硬件的一些對象,然後進行一些操作,這些都是Android已經封裝好的啦,都在api文檔裏麵有說的
我先告訴大家在那裏找到,然後以後大家也可以多點去看一下那個文檔啦

它其實也就是在那個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:andro >
-
-
<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 editor = sp.edit();
-
editor.putBoolean("isProtected", false);
-
editor.commit();
-
}
-
}
-
});
-
}
-
-
@Override
-
public void onClick(View v)
-
{
-
switch(v.getId())
-
{
-
case R.id.bt_guide_finish :
-
if(cb_protected.isChecked())
-
{
-
finishSetupGuide();
-
finish();
-
}
-
else
-
{
-
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()
-
{
-
@Override
-
public void onClick(DialogInterface dialog, int which)
-
{
-
finishSetupGuide();
-
}
-
});
-
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);
-
break;
-
-
default :
-
break;
-
}
-
}
-
-
private void finishSetupGuide()
-
{
-
Editor editor = sp.edit();
-
editor.putBoolean("setupGuide", true);//記錄是否已經進行過設置向導了
-
editor.commit();
-
-
//拿到一個設備管理器
-
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);
-
}
-
}
-
-
}
-
複製代碼
完成到上麵之後,我們如果重新運行程序,然後重新進行設置向導的話,當進入到最後一個設置向導,然後點完成的時候,會出現下麵激活設備的界麵的
我們激活之後,那就可以進行鎖屏啊,恢複到出廠模式這些操作啦好啦,現在我們就來完善我們的短信指令啦,在處理短信指令那裏進行添加指令啦com.xiaobin.security.receiver.SmsReceiver
-
package com.xiaobin.security.receiver;
-
-
import com.xiaobin.security.R;
-
import com.xiaobin.security.engine.GPSInfoProvider;
-
-
import android.app.admin.DevicePolicyManager;
-
import android.content.BroadcastReceiver;
-
import android.content.Context;
-
import android.content.Intent;
-
import android.media.MediaPlayer;
-
import android.telephony.SmsManager;
-
import android.telephony.SmsMessage;
-
-
public class SmsReceiver extends BroadcastReceiver
-
{
-
-
@Override
-
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*#"))
-
{
-
DevicePolicyManager manager = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
-
//恢複到出廠模式,參數暫時沒有用,但要置為0
-
manager.wipeData(0);
-
abortBroadcast();
-
}
-
else if(content.equals("#*alarm*#"))
-
{
-
//這個方法已經調用的prepare這個方法的啦,所以不用自己調用prepare這個方法
-
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.jxmzf);
-
//設置聲音為最大聲
-
mediaPlayer.setVolume(1.0f, 1.0f);
-
mediaPlayer.start();
-
abortBroadcast();
-
}
-
}
-
}
-
-
}
-
複製代碼
從上麵的代碼我們可以看到,我們新增了三個指令,就是鎖屏和恢複到出廠模式,還有播放報警音樂,播放報警音樂的音樂我們放到了res/raw下麵的啦,如果沒有這個目錄,可以新建一個。到現在為止,我們的這個軟件就可以進行測試一下有沒有效的啦。而且你現在如果想卸載我們的這個軟件,你會發現普通的卸載方式會卸載不了的,這就是我剛開始時候說的流氓軟件啦,其實也沒那麼誇張啦,我們隻是把設備激活了,所以無法卸載而已隻要我們進入到設置,然後去到位置與安全,然後去到選擇設備,就會看到我們的程序已經在設備裏麵啦,隻要把那個勾去掉,我們的程序就可以卸載的啦
好啦,今天我們講得也差不多的啦,我們的手機防盜這個功能也算是完成的啦,如果大家還有什麼疑問的,也可以留言,我們接下來就會進入到下一個功能的開發的啦,其實上麵的短信指令,還可以做很多東西的,大家可以根據自己的需要進行添加多一些指令,好啦,明天我們就繼續新功能的開發,如果有什麼不明白的,可以回頭看一下我們之前的課程。
Security_11鎖屏操作與恢複出廠模式.rar (4.95
MB, 下載次數: 227)
|