Dans ce cas peut être que combiner les deux listener t'apportera la solution :aie:.Citation:
En effet, je peux être connecté en USB sans monter le disque!
Version imprimable
Dans ce cas peut être que combiner les deux listener t'apportera la solution :aie:.Citation:
En effet, je peux être connecté en USB sans monter le disque!
:lol: Malheureusement c'est ce que je fais depuis le début, je détecte si le disque est monté:
(J'ai tout mis comme ça on est tranquille :D)Code:
1
2
3
4
5
6
7
8 IntentFilter filter = new IntentFilter (); filter.addAction (Intent.ACTION_MEDIA_MOUNTED); filter.addAction (Intent.ACTION_MEDIA_UNMOUNTED); filter.addAction (Intent.ACTION_MEDIA_SHARED); filter.addAction (Intent.ACTION_UMS_CONNECTED); filter.addDataScheme("file"); registerReceiver (bcr, filter);
Et dans le onReceive je teste si l'USB est connecté:
Tout ce code est placé dans le onCreate de mon Servcice que j'initialise dans ma première activity comme ceci:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 BroadcastReceiver bcr = new BroadcastReceiver () { @Override public void onReceive (Context context, Intent intent) { int status = intent.getIntExtra ("status", BatteryManager.BATTERY_PLUGGED_AC); if (status == BatteryManager.BATTERY_PLUGGED_USB) if (_global.currentActivity != null) { g.setResult (9); g.finish (); } } };
et dans le manifest j'ajoute bien sure:Code:
1
2
3 Intent intent = new Intent ("fr.service.MyService.ACTION"); startService (intent);
Code:
1
2
3
4
5
6 <service android:enabled="true" android:name="fr.service.MyService"> <intent-filter> <action android:name="fr.service.MyService.ACTION" /> </intent-filter> </service>
Bonjour,
essaye de rajouter celui là à ta liste
Citation:
public static final String ACTION_MEDIA_CHECKING
Since: API Level 3
Broadcast Action: External media is present, and being disk-checked The path to the mount point for the checking media is contained in the Intent.mData field.
Constant Value: "android.intent.action.MEDIA_CHECKING"
Cela ne fonctionne toujours pas!
En faite, j'ai l'impression que mon service ne fonctionne pas lorsque j'ouvre une autre application par dessus (ouverture du gestionnaire de montage du disque via l'onglet des notifications)!
Ce qui fait que lorsque je retourne sur l'application, il me reexecute le onCreate et donc il essaye de relire dans la base SQLite! Sauf que ceci provoque une erreur puisque le disque est monté!
Donc le plus simple serait, comme nous avons commencé à le faire auparavant, de faire un test dans le onResume (qui lui est appelé si je ne me trompe pas, à la création et à chaque fois que je retourne sur l'activity) ou dans le onCreate pour arreter le programme si le disque est monté.
C'est la condition si le disque est monté que je n'arrive pas à faire!
Désolé pas trop le temps de regarder
Peut être trouvera tu quelque chose t'intéressant la dedans :).
http://www.devdaily.com/java/jwareho...ice.java.shtml
http://www.androidjavadoc.com/2.3/an...vice.Stub.html
Bonjour,
http://developer.android.com/referen....Notification)
Le foreground ne changera en rien ta gestion de montage de ton disque, comme te l'as expliqué Yan cela te permettra qu'Android ne ferme pas ton service/application s'il a besoin de mémoire ou s'il juge qu'il est "inutile".
http://developer.android.com/referen...Foreground(int, android.app.Notification)
Cela change quoi?
Une application passé en arrière plan peut être fermé par Android n'importe quand. Mettre un service en foreground, spécifie que l'appli fait quelques chose et ne doit pas être fermée.. Par exemple lors de la lecture d'un mp3.
J'arrive pas à comprendre ton problème :/. Es ce que déclarer ton broadcast receiver dans le manifest ne serait pas ton besoin? Si l'appli est fermé, il sera relancé pour exécute le receiver.
J'ai essayé de passer par le manifest mais ca ne donne rien!
Voici mon BroadCast Receiver:
et dans mon manifest:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 public class MountReceiver extends BroadcastReceiver { @Override public void onReceive (Context context, Intent intent) { int status = intent.getIntExtra ("status", BatteryManager.BATTERY_PLUGGED_AC); if (status == BatteryManager.BATTERY_PLUGGED_USB) Toast.makeText(context, "test", Toast.LENGTH_LONG).show(); } }
Code:
1
2
3
4
5
6
7
8
9
10
11 <receiver class="fr.elior.Receiver.MountReceiver" android:name="com.tuto.android.MountReceiver"> <intent-filter android:priority="100"> <action android:name="android.intent.ACTION_MEDIA_MOUNTED" /> <action android:name="android.intent.ACTION_MEDIA_UNMOUNTED" /> <action android:name="android.intent.ACTION_MEDIA_SHARED" /> <action android:name="android.intent.ACTION_UMS_CONNECTED" /> <action android:name="android.intent.ACTION_MEDIA_CHECKING" /> </intent-filter> </receiver>
Mon problème est que j'utilise une base SQLite et que lorsque je monte mon disque, je n'ai plus accès à celle ci. Donc j'aimerai détecter le fait que mon disque soit monté afin de fermer l'application!Citation:
J'arrive pas à comprendre ton problème :/
Après mure réflexion et grâce à vos remarques j'ai trouvé une solution plus simple! Tester si on a accès à la base de donnée au début de mes Activity! Et ca fonctionne!
Merci à vous pour vos idées! Vous êtes des chefs comme d'hab ;)
c'est normale que tu ne vérifie pas le type d'intent reçus?
Cool.Citation:
Après mure réflexion et grâce à vos remarques j'ai trouvé une solution plus simple! Tester si on a accès à la base de donnée au début de mes Activity! Et ca fonctionne!
Par contre ça vaut tout de même le coup d'utiliser le receiver pour être notifié d'une déconnexion/connexion. Mais pas besoin de le mettre dans le manifest dans ton cas.
oui je vais tout de même essayer de voir comment le faire fonctionner!
Merci pour ton aide ;)