Allow the phone to vibrate when the screen turns off

I am looking for a way to let my program make the phone vibrate after the screen has disconnected from the timeout. I did a lot of research and did not find what works. I examined the PowerManager class and, more specifically, the WakeLock mechanism. From the sound of many posts, I will need to use the PARTIAL_WAKE_LOCK variable of the WakeLock class.

PARTIAL_WAKE_LOCK - A blocking lock that enables the CPU to operate.

However, I cannot make it vibrate the phone when the screen turns off. I know that I am using WakeLock correctly because I can get SCREEN_DIM_WAKE_LOCK to work. Is PARTIAL_WAKE_LOCK what I'm looking for?

+1
source share
2 answers
@Override public void onCreate() { super.onCreate(); // REGISTER RECEIVER THAT HANDLES SCREEN ON AND SCREEN OFF LOGIC IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); BroadcastReceiver mReceiver = new ScreenReceiver(); registerReceiver(mReceiver, filter); } @Override public void onStart(Intent intent, int startId) { boolean screenOn = intent.getBooleanExtra("screen_state", false); if (!screenOn) { // Get instance of Vibrator from current Context Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); // This example will cause the phone to vibrate "SOS" in Morse Code // In Morse Code, "s" = "dot-dot-dot", "o" = "dash-dash-dash" // There are pauses to separate dots/dashes, letters, and words // The following numbers represent millisecond lengths int dot = 200; // Length of a Morse Code "dot" in milliseconds int dash = 500; // Length of a Morse Code "dash" in milliseconds int short_gap = 200; // Length of Gap Between dots/dashes int medium_gap = 500; // Length of Gap Between Letters int long_gap = 1000; // Length of Gap Between Words long[] pattern = { 0, // Start immediately dot, short_gap, dot, short_gap, dot, // s medium_gap, dash, short_gap, dash, short_gap, dash, // o medium_gap, dot, short_gap, dot, short_gap, dot, // s long_gap }; // Only perform this pattern one time (-1 means "do not repeat") v.vibrate(pattern, -1); } else { // YOUR CODE } } 

note u you must add the use-permission string to the Manifest.xml file outside the block.

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="..."> <uses-permission android:name="android.permission.VIBRATE"/> 

Note: you should also check this code on a real phone, the emulator cannot viberate

+4
source

For me, the solution was to vibrate directly without templates, so I don't need to use PowerManager to unlock.

+1
source

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


All Articles