Ich habe ein solches Problem: Meine Anwendung abonniert auf dem Intent.SCREEN_ON-Ereignis, aber in einigen Fällen wird es falsche Wirkung. Wie kann ich erkennen - SCREEN_ON wurde durch einen Knopf (Benutzer hat den Netzschalter gedrückt), oder irgendeinen anderen (Alarm, eingehender Anruf, Benachrichtigung von WhatsApp) verursacht? Ist es möglich?Quelle des Ereignisses (SCREEN_ON)
0
A
Antwort
0
Nein. Es ist nicht möglich.
Im Mittelpunkt jeder Sendung steht ein Intent
. Wenn solch ein Kunststück möglich ist, sollten wir die erforderlichen Informationen irgendwo in ihnen sehen.
Aber wenn man einen Blick auf Intent
‚s soucre nehmen, das sind die einzigen Felder definiert:
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;
Sie sehen, unter diesen Feldern gibt es nicht wirklich eine, die uns etwas über den Absender sagen konnte.
0
Sie können sogar screen ON erkennen.
MeineAnw:
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 Empfänger:
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;
}
}
manifest add:
<application
android:name=".MyApp">
</application>
Ein anderer Weg zu:
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();
}
}
Hauptklasse in Überschreibung metod:
@Override
protected void onResume() {
super.onResume();
MyApp.activityResumed();
}
@Override
protected void onPause() {
MyApp.activityPaused();
super.onPause();
}
onClick Taste drücken:
if(MyApp.isActivityVisible()){
}
Verwandte Themen
- 1. ASP.NET Session_End: Ermitteln der Quelle des Ereignisses
- 2. So finden Sie die Quelle des Ereignisses in Typoskript
- 3. Berechne Wahrscheinlichkeit des Ereignisses
- 4. Erfassen des Outlook 2013 Senden des Ereignisses
- 5. Deaktivierung des On-Click-Ereignisses
- 6. Abfangen des Ereignisses von DataGrid
- 7. Anhören des mousescroll-Ereignisses jquery
- 8. Informationen über die Quelle eines Ereignisses mit jQuery abrufen
- 9. Amazon SNS, wie finde ich die Quelle eines Ereignisses?
- 10. Quelle des Methodenaufrufs python
- 11. Verwenden des OnInit-Ereignisses in asp.net
- 12. Aufruf des Ereignisses nach dem Befehl Ausführen
- 13. ErrorIrresolvableConflict während des Erstellens eines Ereignisses
- 14. Ionic Inappbrowser zum Abrufen des Exit-Ereignisses
- 15. Service-Mitarbeiter -Warum verlängern Lebensdauer des Ereignisses?
- 16. Entfernen des Mouseover-Ereignisses bei eingebetteten Tabellen
- 17. Abfangen des Scrolling-Ereignisses in gtk #
- 18. Caching des Blur-Ereignisses mit jQuery
- 19. Vorhersage des Auftretens eines Ereignisses mit Zeitreihendaten
- 20. Ausführen des Ereignisses synchron in Mokka
- 21. Umfang des Ereignisses Listener innerhalb der Schleife
- 22. Abfangen des Exit-Ereignisses einer einfachen Konsolenanwendung
- 23. Ändern des onclick-Ereignisses mit jQuery
- 24. Auslösen des Click-Ereignisses mit Dojo/Javascript?
- 25. Verwenden des Exited-Ereignisses in vb.net
- 26. C++ Lambda Callback zum Auslösen des Ereignisses
- 27. Empfangen des Event.COPY-Ereignisses in Flash
- 28. Aufruf des benutzerdefinierten Ereignisses content_script.js von jQuery?
- 29. Binden des timeupdate -Ereignisses mit einem div
- 30. Bigquery fragt nach Zeitpunkt des Ereignisses
Благодарю за идею! Покопаюсь в этом направление .. – Alexander
@Alexander незачто –