我正在开发一个应用程序,其中点击电源按钮上的数字按钮(4次),但现在的问题是当用户按下home按钮4次时,它将触发该呼叫,我只需要侧面电源按钮单击。如何在Android应用程序中获取侧电源按钮点击次数?
回答
我在清单
<receiver
android:name=".services.SOSBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.SCREEN_OFF"/>
<action android:name="android.intent.action.SCREEN_ON"/>
</intent-filter>
</receiver>
<service
android:name=".services.SOSService"
android:enabled="true">
</service>
接收机和服务,我BroadcastReceiver class
public class SOSBroadcastReceiver extends BroadcastReceiver
{
private static long lastTriggerTime = 0;
private static final int ONE_MILLI = 1000;
protected static final long ONE_SEC = 1 * ONE_MILLI;
protected static final long TWO_SEC = 2 * ONE_MILLI;
protected static final long THREE_SEC = 3 * ONE_MILLI;
protected static final int TRIGGER_THRESHOLD = 3;
protected static boolean triggerInProgress = false;
protected static int triggerCounter = 0;
@Override
public void onReceive(Context context, Intent intent)
{
if (intent.getAction().contains(Intent.ACTION_SCREEN_ON))
{
if (!triggerInProgress)
{
checkAndCreateAlert(context);
}
}
else if (intent.getAction().contains(Intent.ACTION_SCREEN_OFF))
{
if (!triggerInProgress)
{
checkAndCreateAlert(context);
}
}
}
private void checkAndCreateAlert(Context context)
{
/*---- If the gap between power button press is less than 2 seconds ----*/
if ((System.currentTimeMillis() - lastTriggerTime) <= TWO_SEC
|| (triggerCounter == 0))
{
triggerCounter++;
lastTriggerTime = System.currentTimeMillis();
}
else
{
triggerCounter = 0;
}
if (triggerCounter > TRIGGER_THRESHOLD)
{
((Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE)).vibrate(1000);
triggerInProgress = true;
Intent intent = new Intent(context, SOSActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("timer", true);
context.startActivity(intent);
triggerInProgress = false;
triggerCounter = 0;
}
}
}
我的代码将保持电源按钮点击的次数在screen_on和screen_off事件的条款和执行其他方法,如果电源按钮在2秒内按下3次以上。
这是我Service class
public class SOSService extends Service
{
BroadcastReceiver mReceiver;
IntentFilter pqrs_intentFilter;
@Override
public IBinder onBind(Intent intent)
{
return null;
}
@Override
public void onCreate()
{
super.onCreate();
}
@Override
public void onDestroy()
{
unregisterReceiver(mReceiver);
}
@Override
public void onStart(Intent intent, int startid)
{
pqrs_intentFilter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
pqrs_intentFilter.addAction(Intent.ACTION_SCREEN_ON);
mReceiver = new SOSBroadcastReceiver();
registerReceiver(mReceiver, pqrs_intentFilter);
}
public void onStop(Intent intent)
{
unregisterReceiver(mReceiver);
}
}
此代码仅与侧面电源按钮点击一起使用? –
因为在我的代码中,当用户按下中心按钮回家时,它会触发一个事件 –
谢谢让我试一下这段代码。 –
public class ExampleActivity extends Activity {
@Override
protected void onCreate() {
// INITIALIZE RECEIVER
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
BroadcastReceiver mReceiver = new ScreenReceiver();
registerReceiver(mReceiver, filter);
// YOUR CODE
}
@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();
}
}
接收机
public class ScreenReceiver extends BroadcastReceiver {
private boolean screenOff;
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
screenOff = true;
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
screenOff = false;
}
Intent i = new Intent(context, UpdateService.class);
i.putExtra("screen_state", screenOff);
context.startService(i);
}
}
服务
public static class UpdateService extends Service {
@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) {
// YOUR CODE
} else {
// YOUR CODE
}
}
}
希望这是有用的。如果您有任何问题,请告诉我。
我使用相同的代码,我只想要侧电源按钮单击此代码是在主页按钮上触发点击也。 –
- 1. 测量Android应用程序中点击按钮的次数
- 2. 退出应用程序第二次后退按钮点击 - Android
- 3. 如何在电源按钮上按启动应用程序
- 4. 如何重置Android应用程序点击按钮?
- 5. 更改应用程序语言在android中的按钮点击
- 6. 应用程序冻结按钮点击
- 7. 计算在我的程序中点击按钮的次数
- 8. 如何在android中点击按钮来运行第一个应用程序?
- 9. Android - 计数电源按钮点击并开始活动
- 10. 在HOME按钮上整理android应用程序点击
- 11. 在按钮上点击后台运行Android应用程序
- 12. Android应用程序失败并在点击按钮后停止
- 13. 点击按钮后,如何获取grid.rows.count?
- 14. 点击次数按钮
- 15. 如何在点击按钮时退出原生应用程序?
- 16. 每次点击按钮时应用程序崩溃?
- 17. 如何获取画布中按钮的点击事件 - Android?
- 18. 如何在Android中点击按钮时撰写电子邮件?
- 19. 如何禁用一旦点击按钮,并再次启用一旦在Android中点击另一个按钮
- 20. 如何获取点击按钮可到达的页面的源
- 21. 如何在Facebook墙上点击一个按钮,点击iPhone应用程序
- 22. Android:单击按钮时如何从按钮中获取文本?
- 23. 如何在android应用程序中获取字典源
- 24. 长按事件在按钮上点击Android在Android中点击
- 25. 在javascript中捕获原生按钮在Android手机中的点击次数
- 26. 应用程序崩溃的按钮点击 - Android的工作室
- 27. android:点击按钮后应用程序崩溃
- 28. Java android应用程序致命异常点击按钮
- 29. Android应用程序关闭后点击按钮
- 30. 在Android Webview应用程序中无法点按共享按钮
分享你的代码......你有什么尝试,直到现在 – Akshay
你试试这个https://stackoverflow.com/questions/37157921/want-to-access-power-button-events-in-android?answertab=票#tab-top? –
[想要访问Android中的电源按钮事件]的可能的副本(https://stackoverflow.com/questions/37157921/want-to-access-power-button-events-in-android) – JRG