Start action when screen is on

I developed a lockscreen for adnroid. I am trying to use a broadcast receiver to trigger lockscreen activity when the user presses the power button to unlock.

public class Receiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)){ Log.w("BAM", "Screen went on"); } else if(intent.getAction().equals(Intent.ACTION_SCREEN_OFF)){ Log.w("BAM","Screen went off"); } } 

}

Android manifest: ``

 <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="21" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MyLockScreenActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name="MyAdminReceiver" android:permission="android.permission.BIND_DEVICE_ADMIN"> <meta-data android:name="android.app.device_admin" android:resource="@xml/admin"/> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" /> </intent-filter> </receiver> <receiver android:name=".Receiver"> <intent-filter> <action android:name="android.intent.action.USER_PRESENT" /> <action android:name="android.intent.action.ACTION_SHUTDOWN" /> </intent-filter> </receiver> <activity android:name=".LockScreen"></activity> </application> 

`

 private ActionBar actionBar; private ViewPager viewer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.lockscreen); actionBar = getSupportActionBar(); actionBar.hide(); IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); BroadcastReceiver mReceiver = new Receiver(); registerReceiver(mReceiver, filter); viewer = (ViewPager) findViewById(R.id.viewr); viewer.setAdapter(new MyAdapter(getSupportFragmentManager())); } 

but when the user presses the power button, Lockscreen activity starts after 1-3 seconds. Is it advisable to start work when the user first pressed the power button to turn off? How can i do this?

Thank you for your advice. (sorry for my bad english!)

+6
source share
1 answer

Firstly, unlike other widespread intentions, for Intent.ACTION_SCREEN_OFF and Intent.ACTION_SCREEN_ON you CANNOT declare them in your Android manifest! I don’t know exactly why, but they must be registered with IntentFilter in your JAVA code.

using:

Change again

 public class YourActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.YourLayout); IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); BroadcastReceiver mReceiver = new ScreenReceiver(); registerReceiver(mReceiver, filter); } public class ScreenReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals(Intent.ACTION_SCREEN_ON)){ Log.w("BAM", "Screen went on"); } else if(intent.getAction().equals(Intent.ACTION_SCREEN_OFF)){ Log.w("BAM","Screen went off"); } } } } 

Tested, working!

+4
source

Source: https://habr.com/ru/post/986230/


All Articles