我有這樣的問題: 我的應用程序訂閱Intent.SCREEN_ON事件,但在某些情況下它會產生錯誤的效果。如何檢測 - SCREEN_ON是由按鈕(用戶按下電源按鈕)還是其他任何(來自whatsapp的報警,來電,通知)引起的?可能嗎?事件來源(SCREEN_ON)
0
A
回答
0
不,這是不可能的。
每個廣播的核心是一個Intent
。如果這樣的壯舉是可能的,那麼我們應該在他們的某處看到所需的信息。
但是,如果你看一看Intent
的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();
}
}
主類中重寫梅託德:
@Override
protected void onResume() {
super.onResume();
MyApp.activityResumed();
}
@Override
protected void onPause() {
MyApp.activityPaused();
super.onPause();
}
的onClick按下按鈕:
if(MyApp.isActivityVisible()){
}
相關問題
- 1. 春天和事件來源
- 2. 如何識別事件的來源..?
- 3. 捕獲GA中事件的來源
- 4. PyQT中事件的識別來源
- 5. jQuery得到beforeunload事件來源ID
- 6. 確定'onscroll'事件的來源
- 7. 當屏幕關閉時,注入screen_on事件以使傳感器工作
- 8. 事件源FullCalendar
- 9. Contiki事件源
- 10. 事件源vs原始源
- 11. 事件源:避免項目重複事件,同時重播事件並收聽新來的事件
- 12. 確定事件源
- 13. 跨域事件源
- 14. 文件事務問題 - 存儲每個文件的來源?
- 15. iOS:具有自定義事件源(來自web/ICS)的事件工具包?
- 16. 從小部件獲取SCREEN_ON和SCREEN_OFF意圖
- 17. 來自其他項目的來源文件,其中來源
- 18. iphone javascript事件資源?
- 19. FullCalendar JSON事件源問題
- 20. 如何在打字稿中找到事件的來源
- 21. 查找點擊的來源,事件冒泡
- 22. 無法找到來自源的事件ID的說明
- 23. 如何獲取ITEM_SHARED_CREATE和ITEM_SHARED_UNSHARE事件的來源?
- 24. Sharepoint-Property在ItemAdded事件中標識文檔/項目的來源
- 25. 通過特定的方式讀取Windows事件日誌來源
- 26. D3拖動事件行爲:DragEvent.x和DragEvent.y值來源
- 27. 如何版本在分佈式事件來源的系統
- 28. 檢測鍵盤/條形碼掃描儀事件的來源
- 29. 針對不同來源的AWS lambda事件規範
- 30. 找出凸起的路由事件的來源
Благодарюзаидею! Покопаюсьвэтомнаправлении.. – Alexander
@Alexanderнезачто –