2013-03-05 5 views
1

Я пытаюсь блокировать и разблокировать экран,Блокировка экрана от приемника

То, что я делаю это как следующий Broadcast receiver, который проверки ли экран включен в положение OFF, если экран находится на нем будет Заблокируйте экран, и если OFF, он разблокирует экран.

код, я использую в Broadcast receiver является

public void onReceive(Context context, Intent intent) { 

     System.out.println("Entered Broadcaste Reciever........"); 
     context1 = context; 
     if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { 
      // DO WHATEVER YOU NEED TO DO HERE 
      mShaker = new ShakeListener(context); 
       mShaker.setOnShakeListener(new ShakeListener.OnShakeListener() { 
        public void onShake() 
        { 
        PowerManager TempPowerManager = (PowerManager) context1.getSystemService(Context.POWER_SERVICE); 
        PowerManager.WakeLock TempWakeLock = TempPowerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP |PowerManager.ON_AFTER_RELEASE, "TempWakeLock"); 
        TempWakeLock.acquire(); 
        final Vibrator vibe = (Vibrator)context1.getSystemService(Context.VIBRATOR_SERVICE); 
        vibe.vibrate(100); 
      System.out.println("LISTENING SHAKE"); 
        } 
       }); 

     } 
     else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { 
      // AND DO WHATEVER YOU NEED TO DO HERE 

      mShaker = new ShakeListener(context); 
       mShaker.setOnShakeListener(new ShakeListener.OnShakeListener() { 
        public void onShake() 
        { 

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



        ComponentName mAdminName = new ComponentName(context1,LockActivity.class); 
        IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); 
        filter.addAction(Intent.ACTION_SCREEN_OFF); 
        BroadcastReceiver mReceiver = new ScreenReceiver(); 
        context1.registerReceiver(mReceiver, filter); 
        System.out.println("The Device device admin enabled"); 
        Intent intent = new    Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN); 
    intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, mAdminName); 
              intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION,"onEnabled"); 
            mDPM.lockNow(); 
            mDPM.setMaximumTimeToLock(mAdminName,0); 
            intent.putExtra("force-locked", DeviceAdminInfo.USES_POLICY_FORCE_LOCK); 
    //           startActivityForResult(intent, 1); 
        } 
       }); 
     } 

Проблема заключается в том, что начинает правильно и ДО 5 встряхивает работает должным образом, и после этого он будет бесконечное состояние и устройство получить stucked..Somebody помощь мне найти решение

+0

Вы используете метод onResume и onPause в своем коде ??? – QuokMoon

+0

no i did not написал это – ammukuttylive

ответ

1

Теперь что-то иметь в виду, что порядок событий, прежде чем экран система выключит является:

ExampleActivity.onPa использовать() -> ScreenReceiver.onReceive()

Что немного неинтуитивный, как можно подумать, что приемник будет получить удар первого - и поэтому, когда вы поиграйте с устанавливающим булевыми и т.д., знать об этом мало факт, а также, когда экран становится на порядок событий:

ExampleActivity.onResume() -> ScreenReceiver.onReceive()

@Override 
    protected void onPause() { 
     // when the screen is about to turn off 
     if (ScreenReceiver.wasScreenOn) { 
      // this is the case when onPause() is called by the system due to a screen state change 
      System.out.println("SCREEN TURNED OFF"); 
     } else { 
      // this is when onPause() is called when the screen state has not changed 
     } 
     super.onPause(); 
    } 

    @Override 
    protected void onResume() { 
     // only when screen turns on 
     if (!ScreenReceiver.wasScreenOn) { 
      // this is when onResume() is called due to a screen state change 
      System.out.println("SCREEN TURNED ON"); 
     } else { 
      // this is when onResume() is called when the screen state has not changed 
     } 
     super.onResume(); 
    } 

Reference from here

+0

Я уже пробовал его, имея ту же проблему – ammukuttylive

+0

Можете ли вы показать ошибку ??? – QuokMoon

+0

нет ошибок, сообщающих о проблеме, это приведет к замедлению работы устройства во время выполнения. – ammukuttylive

Смежные вопросы