まず、ここを参照してください:
このポリシーを制御するには、デバイス管理者がメタデータの「uses-policies」セクションに「force-lock」タグを含める必要があります。
このメソッドを呼び出すには、呼び出し元のデバイス管理者が USES_POLICY_FORCE_LOCK を要求している必要があります。そうでない場合は、セキュリティ例外がスローされます。
あなたが得たコードに応じて、あなたのケースで何が間違っている可能性があるかについてのかなり良い説明があります (もちろん、ここで提供されているコードはすべて役に立ちます!)。
DevicePolicyManager.lockNow()
コードを2回呼び出すとうまくいくと何度か聞いたことがありますが、これを行う1つの方法を次に示します。
mDPM = (DevicePolicyManager)getApplicationContext().getSystemService("device_policy");
Handler handlerUI = new Handler();
handlerUI.postDelayed(new Runnable() {
@Override
public void run() {
mDPM.lockNow();
}
}, 200);
finish();
mDPM.lockNow();
ここで、同じもののより精巧なバージョンを見つけました。
Android DevicePolicyManager lockNow() problem
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();
}
}
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");
最後の回避策が正しく機能することを祈りましょう。
乾杯