Android lockNow()设备管理员在实际设备上不工作
我正在尝试从SMS接收指定命令时执行lockNow()。我已经在我的模拟器(4.0.3)上进行了测试,它运行良好,但当我在我的实际设备(4.2.2)和(4.1.2)以及(4.2.2)的模拟器上进行测试时,它不工作 似乎它甚至没有在广播接收器上接收短信 编辑:我的emulator(4.2.2)现在可以使用了,当我之前推到4.2.2 AVD时,我实际上忘记了清单中的RECEIVE_SMS权限。但它仍然不能在我的设备上工作 编辑2:我认为这可能是由于第三方短信应用程序(例如GO短信)阻止我的广播首先接收短信。我可能会尝试卸载GO短信,看看它是否有效 编辑3:这是真正的短信。经过数小时的搜索,我只需要禁用围棋短信中的一个设置。打开Go SMS,点击“菜单”并点击“设置”,点击“接收设置”,然后取消选中“禁用其他消息通知”。现在它可以工作了!呸 希望将来能帮助别人 这是我的课程,用于接收短信和执行锁定操作Android lockNow()设备管理员在实际设备上不工作,android,sms,locking,Android,Sms,Locking,我正在尝试从SMS接收指定命令时执行lockNow()。我已经在我的模拟器(4.0.3)上进行了测试,它运行良好,但当我在我的实际设备(4.2.2)和(4.1.2)以及(4.2.2)的模拟器上进行测试时,它不工作 似乎它甚至没有在广播接收器上接收短信 编辑:我的emulator(4.2.2)现在可以使用了,当我之前推到4.2.2 AVD时,我实际上忘记了清单中的RECEIVE_SMS权限。但它仍然不能在我的设备上工作 编辑2:我认为这可能是由于第三方短信应用程序(例如GO短信)阻止我的广播首先接
import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;
public class RemoteWipeSMS extends BroadcastReceiver {
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
private static final String TAG = "SMSBroadcastReceiver";
static final int WIPE_EXTERNAL_STORAGE = 1;
DevicePolicyManager devicePolicyManager;
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("Test get SMS");
Log.i(TAG, "not getting sms");
Log.i(TAG, "Intent recieved: " + intent.getAction());
devicePolicyManager = (DevicePolicyManager)context.getSystemService(Context.DEVICE_POLICY_SERVICE);
if (intent.getAction().equals(SMS_RECEIVED)) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[])bundle.get("pdus");
final SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
}
if (messages.length > -1) {
Log.i(TAG, "Message recieved: " + messages[0].getMessageBody());
Toast.makeText(context, "SMS Received : "+messages[0].getMessageBody(),
Toast.LENGTH_LONG).show();
if (messages[0].getMessageBody().equalsIgnoreCase("Lock")) {
Toast.makeText(context, "SMS Action : To LOCKED",
Toast.LENGTH_LONG).show();
try {
devicePolicyManager.lockNow();
} catch (Exception e) {
Log.e("Locked", "Lock error");
}
} else if (messages[0].getMessageBody().equalsIgnoreCase("Reset")) {
Toast.makeText(context, "SMS Action : To Reset",
Toast.LENGTH_LONG).show();
try {
devicePolicyManager.wipeData(WIPE_EXTERNAL_STORAGE);
} catch (Exception e) {
Log.e("Locked", "Reset error");
}
}
}
}
}
}
}
导入android.app.admin.DevicePolicyManager;
导入android.content.BroadcastReceiver;
导入android.content.ComponentName;
导入android.content.Context;
导入android.content.Intent;
导入android.os.Bundle;
导入android.os.Handler;
导入android.telephony.sms消息;
导入android.util.Log;
导入android.widget.Toast;
公共类RemoteWipeSMS扩展广播接收器{
私有静态最终字符串SMS_RECEIVED=“android.provider.Telephony.SMS_RECEIVED”;
私有静态最终字符串TAG=“SMSBroadcastReceiver”;
静态最终整数擦除外部存储器=1;
DevicePolicyManager DevicePolicyManager;
@凌驾
公共void onReceive(上下文、意图){
System.out.println(“测试获取SMS”);
Log.i(标记“未收到短信”);
Log.i(标记“Intent received:+Intent.getAction());
devicePolicyManager=(devicePolicyManager)context.getSystemService(context.DEVICE\u POLICY\u SERVICE);
if(intent.getAction().equals(SMS_已接收)){
Bundle=intent.getExtras();
if(bundle!=null){
Object[]pdus=(Object[])bundle.get(“pdus”);
最终SmsMessage[]消息=新SmsMessage[pdus.length];
对于(int i=0;i-1){
Log.i(标记“MessageReceived:+messages[0].getMessageBody());
Toast.makeText(上下文,“收到的SMS:+消息[0].getMessageBody(),
Toast.LENGTH_LONG).show();
如果(消息[0].getMessageBody().equalsIgnoreCase(“锁”)){
Toast.makeText(上下文,“SMS操作:要锁定”,
Toast.LENGTH_LONG).show();
试一试{
devicePolicyManager.lockNow();
}捕获(例外e){
Log.e(“锁定”、“锁定错误”);
}
}else if(消息[0].getMessageBody().equalsIgnoreCase(“重置”)){
Toast.makeText(上下文,“SMS操作:重置”,
Toast.LENGTH_LONG).show();
试一试{
devicePolicyManager.wipeData(擦除外部存储器);
}捕获(例外e){
Log.e(“锁定”、“重置错误”);
}
}
}
}
}
}
}
我舱单的一部分
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<application
android:allowBackup="true"
android:icon="@drawable/app_icon"
android:label="@string/app_name"
android:theme="@android:style/Theme.Holo" >
<service
android:name="TestService">
</service>
<receiver
android:name="com.my.test.RemoteWipeSMS"
android:exported="true" >
<intent-filter
android:priority="999" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<!-- This is where we register our receiver -->
<receiver
android:name="com.my.test.DeviceAdminDetect"
android:permission="android.permission.BIND_DEVICE_ADMIN" >
<intent-filter>
<!-- This action is required -->
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
</intent-filter>
<!-- This is required this receiver to become device admin component. -->
<meta-data
android:name="android.app.device_admin"
android:resource="@xml/device_admin" />
</receiver>
<activity
android:name="com.my.test.Main"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
用户是否将应用注册为设备管理员?@323go yes!我尝试在我的设备上重新安装,但仍然无法正常工作。