2016-07-04 7 views
2

Ich möchte gerne feststellen, ob meine Aktivität durch eine Systemwarnung oder eine andere Überlagerung (zum Beispiel das Power-Menü, wenn ich den Einschaltknopf gedrückt habe) oder Malware, die den Start erkennt, verdeckt wurde meiner Tätigkeit. Mir ist aufgefallen, dass die Vordergrund-App in diesem Fall immer noch meine App ist, also kann ich nicht einfach darauf basieren, was die Vordergrund-App ist. Ich bemerke auch, dass onPause() nicht aufgerufen wird, wenn meine Aktivität verdeckt ist, also kann ich auch keine Logik in onPause() setzen. Selbst wenn ich das tue, müsste ich dann zwischen einem Systemalarm/Overlay und dem Drücken der Back/Home-Taste unterscheiden.Wie erkenne ich, dass meine Aktivität verdeckt wurde?

Gibt es andere Möglichkeiten, dies zu erreichen?

+0

'onPause()' sollte der Ort sein. Es muss jedes Mal aufgerufen werden, wenn Ihre Aktivität in den Hintergrund tritt. kannst du bitte nochmal nachschauen? –

+0

Ich denke, Sie sollten einige Boolean in OnBackPressed oder in HomePressEnabled Bedingung hinzufügen. –

+0

@ abhishek-bansal Ich habe es bereits überprüft und bestätigt. onPause() wird nicht aufgerufen, wenn Systemalarme wie das Menü "Power" oder das Lautstärkeregler für meine Aktivität eingeblendet werden. – user1118764

Antwort

0

Sie können mit dem PackageManager abfragen, welches der installierten Pakete über verdächtige Berechtigungen wie SYSTEM_ALERT_WINDOW, BIND_ACCESSIBILITY_SERVICE oder BIND_DEVICE_ADMIN verfügt.

Some code ideas

1

können Sie überprüfen, ob Aktivität, Fragment oder Ansicht Verdeckt wird.

Für die Aktivität müssen Sie die Methode dispatchTouchEvent überschreiben und prüfen, ob das Ereignis die Markierung FLAG_WINDOW_IS_OBSCURED aufweist. Es gibt Beispielcode:

public class OverlayTouchActivity extends Activity { 
    private boolean mObscuredTouch; 

    public boolean isObscuredTouch() { 
     return mObscuredTouch; 
    } 

    @Override 
    public boolean dispatchTouchEvent(MotionEvent event) { 
     mObscuredTouch = (event.getFlags() & MotionEvent.FLAG_WINDOW_IS_OBSCURED) != 0; 
     return super.dispatchTouchEvent(event); 
    } 
} 

Dies ist ein Teil des Android-Code, bitte OverlayTouchActivity.java überprüfen. Um verdeckt ist zu überprüfen, ob Fragment, führen Sie das folgende Stück Code in Fragmente, das auf die OverlayTouchActivity Aktivität gehört:

OverlayTouchActivity activity = (OverlayTouchActivity) getActivity(); 
if (activity.isObscuredTouch()) { 
    // Fragment is bbscured 
} 

Bitte sehen AppPermissionsFragment.java Fragment (Suche nach OverlayTouchActivity).

Für Ansicht sollten Sie onFilterTouchEventForSecurity Methode überschreiben. Weitere Informationen finden Sie unter security section der Dokumentation zu View.