Bonjour,
Est-il possible de détecter sur mon activité (de mon application) si l'utilisateur à déplié le volet de notification.
Je constate que l'on ne passe ni dans onResume, ni dans onPause.
Merci d'avance.
Version imprimable
Bonjour,
Est-il possible de détecter sur mon activité (de mon application) si l'utilisateur à déplié le volet de notification.
Je constate que l'on ne passe ni dans onResume, ni dans onPause.
Merci d'avance.
J'ai trouvé ca. A essayer.
Code:<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 @Override public void onWindowFocusChanged(boolean hasFocus) { try { if(!hasFocus) { Object service = getSystemService("statusbar"); Class<?> statusbarManager = Class.forName("android.app.StatusBarManager"); Method collapse = statusbarManager.getMethod("collapse"); collapse .setAccessible(true); collapse .invoke(service); } } catch(Exception ex) { if(!hasFocus) { try { Object service = getSystemService("statusbar"); Class<?> statusbarManager = Class.forName("android.app.StatusBarManager"); Method collapse = statusbarManager.getMethod("collapse"); collapse .setAccessible(true); collapse .invoke(service); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } ex.printStackTrace(); } } }
Ok merci, je teste début de semaine prochaine et te tiens au courant.
Merci encore.
Bomatch
Finalement j'ai eu le temps de faire un essai.
L'idée du onWindowFocus est très bonne. Par contre, je n'arrive pas à comprendre ce que fait exactement le code :weird:
et j'ai l'impression qu'au final, je passe trop souvent dans cette méthode.
Peut-être que ma demande n'est pas assez précise.
J'ai besoin de lancer une synchronisation avec un serveur lorsque l'utilisateur réactive le réseau. Et lorsqu'il passe via la barre de notification, mon OnResume ne marche pas.
Donc onWindowsFocus et une bonne première approche, mais j'ai peur qu'il y ait trop d'appels vers le serveur.
Il faudrait que je puisse capter l'activation du mode OnLine et lancer la synchro à ce moment.
Lol. C'est beaucoup plus simple alors. Il suffit d'intercepter le retour de la connectivité avec un BroadcastReceiver :
Code:
1
2
3
4
5 <receiver android:name=".NetworkReceiver" > <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver>
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public class NetworkReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) { NetworkInfo networkInfo = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); if (networkInfo != null && networkInfo.getDetailedState() == NetworkInfo.DetailedState.CONNECTED) { Log.d("Network", "Internet YAY"); //ici lancer ta synchro } else if (networkInfo != null && networkInfo.getDetailedState() == NetworkInfo.DetailedState.DISCONNECTED) { Log.d("Network", "No internet :("); } } } }
Vraiment désolé, je n'ai pas vu que tu avais répondu.
Merci, je pense que c'est ça qu'il me faut. Je vais l'implémenter dès que je peux.
J'avais vu ceci aussi :
http://stackoverflow.com/questions/4...ode-on-android
Mais il faut que je vois la compatibilité avec un sdk min à 9.
Merci encore à toi.
Bomatch
Alors !!
Je dois mal intégrer ton code car j'ai un crash :
J'ai mis pourtant le Receveir dans le manifest avec le bon chemin qui va bien à la place de NetworkReceiver.Code:java.lang.RuntimeException: Unable to instantiate receiver com.........MyActivity$NetworkReceiver: java.lang.InstantiationException: class com.........MyActivity$NetworkReceiver has no zero argument constructor
Et la classe est dans mon Activité.
J'ai faux ??? Je pense que je place mal ma classe.
J'ai besoin d'avoir le listener dans mon activité
Merci
Bomatch
Il semble que tu ais mis un constructeur dans ta classe NetworkReceiver. Enlèves-le.
Non, je n'ai pas mis de constructeur, j'ai juste copié collé ta classe dans mon activité.
Par contre, j'ai pu corrigé en la mettant "Static"
Merci à toi, j'ai pu faire ce que je voulais.
Bonne fin de journée
Bomatch