2017-06-21 115 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(意圖)行 –

相關問題