【问题标题】:Android DevicePolicyManager lockNow()Android DevicePolicyManager lockNow()
【发布时间】:2013-01-16 20:53:45
【问题描述】:

我是 Android 开发新手,这就是我碰壁的原因。我希望应用程序作为服务运行,并监控 SMS。如果收到特定的 SMS 消息,它会锁定手机(好像锁定期已过)。有点像遥控锁。

我使用DevicePolicyManager 来调用lockNow() 方法。但是,它会在调用 lockNow() 的部分上触发错误。

这是 Activity 的示例代码:

public class SMSMessagingActivity extends Activity {
    /** Called when the activity is first created. */

public static DevicePolicyManager mDPM;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);                    

    }

    public static void LockNow(){
        mDPM.lockNow();
    }

}

我查看了http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/DeviceAdminSample.html 作为参考示例。

谁能帮帮我?告诉我我的代码有什么问题?我是否必须进行一些调整才能在模拟器或设备上启用管理权限?

谢谢!

【问题讨论】:

  • 当谈到错误时,发布它总是一个好主意
  • 我不太习惯用 Eclipse 编程,我只能找到一个运行时错误。

标签: java android sms


【解决方案1】:

以下是文档中的内容:

调用设备管理员必须请求USES_POLICY_FORCE_LOCK 才能调用此方法;如果没有,则会抛出安全异常。

因此,您应该在 oncreate 中执行以下操作:

ComponentName devAdminReceiver; // this would have been declared in your class body
// then in your onCreate
    mDPM = (DevicePolicyManager)getSystemService(Context.DEVICE_POLICY_SERVICE);
    devAdminReceiver = new ComponentName(context, deviceAdminReceiver.class);
//then in your onResume

boolean admin = mDPM.isAdminActive(devAdminReceiver);
if (admin)
    mDPM.lockNow();
else Log.i(tag,"Not an admin");

附带说明,您的示例代码是一个活动。
那,你应该只使用广播接收器来实现一切并监控短信。

这是一个接收短信的 API 示例:

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/os/SmsMessageReceiver.html

【讨论】:

  • 我迷路了。什么时候你真正请求USES_POLICY_FORCE_LOCK
  • 我没有在这里介绍。当您请求管理员权限时,您请求USES_POLICY_FORCE_LOCK - 这将在使用它之前完成 - 例如,在应用程序设置期间。 This page 向您展示了如何做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多