2017-06-21 117 views
0

我想关闭/以编程方式锁定我设备的屏幕以编程方式锁定或关闭屏幕

就目前而言,当我尝试:

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

我有这样的错误:

java.lang.SecurityException异常:没有活动的管理由UID 10176政策#拥有的三

这是我的AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="opteamit.com.belami" > 

    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 
    <uses-feature android:name="android.hardware.location.gps" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 
    <uses-permission android:name="android.permission.CAMERA"/> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 

    <application... 

有什么不对?

+1

显示您的manifist.xml。 – Ibrahim

+0

完成!你想只看到权限? –

回答

2

那么高要求的东西不能用两行代码完成,锁屏需要device admin。您可以按照下列:

private void lock() { 
    PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE); 
    if (pm.isScreenOn()) { 
     DevicePolicyManager policy = (DevicePolicyManager) 
       getSystemService(Context.DEVICE_POLICY_SERVICE); 
     try { 
      policy.lockNow(); 
     } catch (SecurityException ex) { 
      Toast.makeText(
        this, 
        "must enable device administrator", 
        Toast.LENGTH_LONG).show(); 
       ComponentName admin = new ComponentName(context, AdminReceiver.class); 
       Intent intent = new Intent(
        DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN).putExtra(
         DevicePolicyManager.EXTRA_DEVICE_ADMIN, admin); 
       context.startActivity(intent); 
     }   
    } 
} 

AdminReceiverClass

public class AdminReceiver extends DeviceAdminReceiver { 
    public static final String ACTION_DISABLED = "device_admin_action_disabled"; 
    public static final String ACTION_ENABLED = "device_admin_action_enabled"; 

    @Override 
    public void onDisabled(Context context, Intent intent) { 
     super.onDisabled(context, intent); 
     LocalBroadcastManager.getInstance(context).sendBroadcast(
      new Intent(ACTION_DISABLED)); 
    } 
    @Override 
    public void onEnabled(Context context, Intent intent) { 
     super.onEnabled(context, intent); 
     LocalBroadcastManager.getInstance(context).sendBroadcast(
      new Intent(ACTION_ENABLED)); 
    } 
} 

我们还需要声明在元数据中使用的安全策略,以便与路径Android的例子:资源= “@ XML/device_admin_sample”:

<device-admin xmlns:android="http://schemas.android.com/apk/res/android"> 
    <uses-policies> 
    <limit-password /> 
    <watch-login /> 
    <reset-password /> 
    <force-lock /> 
    <wipe-data /> 
    <expire-password /> 
    <encrypted-storage /> 
    <disable-camera /> 
    </uses-policies> 
</device-admin> 
在我们的例子

,我们只需要:

<?xml version="1.0" encoding="utf-8"?> 
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"> 
    <uses-policies> 
     <force-lock /> 
    </uses-policies> 
</device-admin>` 

现在宣布它在我们的manifist.xml:

<receiver 
     android:name=".AdminReceiver" 
     android:label="@string/device_admin" 
     android:description="@string/device_admin_description" 
     android:permission="android.permission.BIND_DEVICE_ADMIN"> 
     <meta-data 
      android:name="android.app.device_admin" 
      android:resource="@xml/device_admin_sample" /> 
     <intent-filter> 
      <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> 
     </intent-filter> 
    </receiver>` 

希望它会帮助你。

+0

谢谢,但我有** android.util.AndroidRuntimeException:从活动上下文外调用startActivity()需要FLAG_ACTIVITY_NEW_TASK标志。这真的是你想要的吗?**(我在“服务”中) –

+0

@Jéwôm'新的例外是什么?何时发生? – Ibrahim

+0

它发生在startActivity(意图)行 –

相关问题