У меня такая проблема: Мое приложение подписано на событие Intent.SCREEN_ON, но в некоторых случаях оно вносит неправильный эффект. Как я могу обнаружить - SCREEN_ON был вызван кнопкой (пользователь нажал кнопку питания) или любым другим (сигнал тревоги, входящий вызов, уведомление от whatsapp)? Является ли это возможным?Источник события (SCREEN_ON)
0
A
ответ
0
Нет. Это невозможно.
В основе каждого радиопередачи лежит Intent
. Если такой подвиг возможен, мы должны увидеть необходимую информацию где-то внутри них.
Но если вы посмотрите на Intent
«s soucre, только эти поля определены:
private String mAction;
private Uri mData;
private String mType;
private String mPackage;
private ComponentName mComponent;
private int mFlags;
private HashSet<String> mCategories;
private Bundle mExtras;
Вы видите, среди этих полей есть на самом деле не один, что может сказать нам что-нибудь об отправителе.
0
Вы даже можете обнаружить SCREEN ON.
MyApp:
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
registerKioskModeScreenOnReceiver();
}
private PowerManager.WakeLock wakeLock;
public OnScreenOnReceiver onScreenOnReceiver;
private void registerKioskModeScreenOnReceiver() {
// register screen off receiver
final IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
onScreenOnReceiver = new OnScreenOnReceiver();
registerReceiver(onScreenOnReceiver, filter);
}
public PowerManager.WakeLock getWakeLock() {
if(wakeLock == null) {
// lazy loading: first call, create wakeLock via PowerManager.
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "wakeup");
}
return wakeLock;
}
}
OnScreenOnReceiver приемник:
public class OnScreenOnReceiver extends BroadcastReceiver {
private static final String PREF_KIOSK_MODE = "pref_kiosk_mode";
Listener listener;
@Override
public void onReceive(Context context, Intent intent) {
if(Intent.ACTION_SCREEN_ON.equals(intent.getAction())){
Log.e("tag", "screeneee:" + intent.getAction());
MyApp ctx = (MyApp) context.getApplicationContext();
// is Kiosk Mode active?
if(isKioskModeActive(ctx)) {
wakeUpDevice(ctx);
}
if(listener!=null)
listener.onPower();
}
}
private void wakeUpDevice(MyApp context) {
PowerManager.WakeLock wakeLock = context.getWakeLock(); // get WakeLock reference via AppContext
if (wakeLock.isHeld()) {
wakeLock.release(); // release old wake lock
}
// create a new wake lock...
wakeLock.acquire();
// ... and release again
wakeLock.release();
}
private boolean isKioskModeActive(final Context context) {
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context);
return sp.getBoolean(PREF_KIOSK_MODE, false);
}
public interface Listener {
public void onPower();
}
public void setListener(Listener listener) {
this.listener = listener;
}
}
манифеста дополню:
<application
android:name=".MyApp">
</application>
Другой способ:
public class MyApp extends Application {
public static boolean isActivityVisible() {
return activityVisible;
}
public static void activityResumed() {
activityVisible = true;
}
public static void activityPaused() {
activityVisible = false;
}
private static boolean activityVisible = false;
@Override
public void onCreate() {
super.onCreate();
}
}
основной класс коррекции Metod:
@Override
protected void onResume() {
super.onResume();
MyApp.activityResumed();
}
@Override
protected void onPause() {
MyApp.activityPaused();
super.onPause();
}
OnClick нажмите кнопку:
if(MyApp.isActivityVisible()){
}
Смежные вопросы
- 1. Android. Причина SCREEN_ON
- 2. Источник события вопрос
- 3. Демо-события Источник
- 4. Источник события FullCalendar
- 5. Как определить источник события ..?
- 6. Правильный способ регистрации событий SCREEN_OFF и SCREEN_ON
- 7. Источник события Длина возвращаемых данных
- 8. JQM pagebeforechange и события источник
- 9. wxPython: как определить источник события
- 10. Идентификатор события 3/Источник: Печать
- 11. Как получить источник события click
- 12. Источник распознавания события в PyQT
- 13. Trigger SCREEN_ON event android через фон Сервис
- 14. Источник события по сравнению с исходным кодом
- 15. AWS Lambda запланированный источник события через cloudformation
- 16. Как определить источник события в ActionListener?
- 17. источник пожара Изменение события в GWT
- 18. Amazon SNS, как найти источник события?
- 19. Как источник AdjustmentListener события в AWT
- 20. Код события: 1325, Источник: ASP.NET 4.0.30319.0
- 21. Как определить источник события компонента Bootstrap Twitter?
- 22. не обнаруживает нож для масла источник события
- 23. Как найти источник события в машинописном тексте
- 24. VS Публикация, Web Deploy - создать Источник события
- 25. Источник элемента события Pass с коротким синтаксисом
- 26. Как узнать источник события в Angularjs
- 27. Android fingerprint api - FingerprintManager.AuthenticationCallback не вызван после намерения SCREEN_ON
- 28. Зарегистрируйте широковещательные приемники для SCREEN_ON/SCREEN_OFF в службе
- 29. Android - когда нужно отменить регистрацию broadCastListener для SCREEN_ON/OFF?
- 30. Как вывести источник события Имя класса в serilog RollingFile outputTemplate?
Благодарю за идею! Покопаюсь в этом направлении .. – Alexander
@ Александр незачто –