2017-06-21 12 views
0

Ich möchte deaktivieren/sperren Sie den Bildschirm meines Geräts programmgesteuert.Sperren oder deaktivieren Sie den Bildschirm programmgesteuert

Für den Moment, wenn ich versuche:

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

Ich habe diesen Fehler:

java.lang.SecurityException: Kein aktiver Server-Betreiber im Besitz von uid 10176 für Politik # 3

Dies ist mein 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... 

Was ist los?

+1

zeigen Sie Ihre manifist.xml. – Ibrahim

+0

fertig! Möchten Sie nur die Berechtigungen sehen? –

Antwort

2

Nun etwas mit hoher Notwendigkeit kann nicht mit zwei Zeilen Code abgeschlossen werden, sperren Bildschirm erforderlich 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); 
     }   
    } 
} 

und AdminReceiverClass: Sie können diese folgen

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)); 
    } 
} 

wir die Sicherheitsrichtlinien in den Metadaten auch benötigen erklärt verwendet, so zum Beispiel mit Pfad android: resource = "@ 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> 

in unserem Fall, dass wir gerade brauchen:

<?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>` 

Jetzt ist es in unserem manifist.xml erklären:

<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>` 

Hoffe, es wird Ihnen helfen.

+0

Danke, aber ich habe ** android.util.AndroidRuntimeException: Aufruf von startActivity() von außerhalb eines Aktivitätskontexts erfordert das Flag FLAG_ACTIVITY_NEW_TASK. Ist das wirklich was du willst? ** (Ich bin in einem 'Service') –

+0

@ Jéwôm 'was ist diese neue Ausnahme? Wann ist es passiert? – Ibrahim

+0

Es geschieht in der startActivity (intent) Zeile –

Verwandte Themen