Nic*_*ick 12 android device-admin
用户希望我的应用程序在使用后关闭屏幕.目前,我使用设备管理员权限实现此目的,DevicePolicyManager.lockNow()如果安全设置设置为PIN/Pattern/FaceUnlock等,则可以正常工作.
但是,如果使用Slide/None,上面的命令只是将用户带到主屏幕(或者什么都不做),这是可以理解的,因为没有什么可以"锁定".在这种情况下有没有办法实现关闭屏幕?我的应用需要SDK> = 16,如果这很重要.
所以我想我的问题是:如何能在应用可靠地关闭屏幕(我不是拿着wakelock,我使用的是WindowManager-flags FLAG_TURN_SCREEN_ON中onAttachedToWindow()).
在我的应用程序"流"是:
-活动是由一个意图开始,而屏幕关闭,显示键盘锁以上/使用上述标志在屏幕上的开关
-用户积极驳回我的活动,我打电话lockNow()和finish()和用户希望屏幕关闭.如果用户使用none/slide lock,则不起作用,而是显示用户的主屏幕
谢谢!
首先看这里:
要控制此策略,设备管理员必须在其元数据的"使用政策"部分中具有"强制锁定"标记.
呼叫设备管理员必须已请求USES_POLICY_FORCE_LOCK才能调用此方法; 如果没有,则抛出安全异常.
根据您获得的代码,这里有一个很好的解释,说明您的情况可能有什么问题(当然这里提供的任何代码都是有用的!).
我曾经多次听说,调用两次代码DevicePolicyManager.lockNow()就可以解决问题了,这是一种方法:
mDPM = (DevicePolicyManager)getApplicationContext().getSystemService("device_policy");
Handler handlerUI = new Handler();
handlerUI.postDelayed(new Runnable() {
@Override
public void run() {
mDPM.lockNow();
}
}, 200);
finish();
mDPM.lockNow();
Run Code Online (Sandbox Code Playgroud)
在这里,我发现了一个更复杂的同一件事:
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");
Run Code Online (Sandbox Code Playgroud)
让我们希望最后的解决方法能够正常工作.
干杯
我使用 Delyan 的评论来实现这一点:
如果您请求 WRITE_SETTINGS,您可以将屏幕超时设置为 1 秒 - android.provider.Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_OFF_TIMEOUT, 1000); 当然,那么你就会搞乱用户的设置,但我想不出更好的方法来做到这一点。我见过可以做到这一点的应用程序 - NoLED 是最突出的例子。
| 归档时间: |
|
| 查看次数: |
3670 次 |
| 最近记录: |