2016-10-11 5 views
0

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)

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()){ 

    } 
+0

Благодарю за идею! Покопаюсь в этом направление .. – Alexander

+0

@Alexander незачто –

Verwandte Themen