Le principe est correct, après je suis pas sur que ce soit nécessaire.
Sinon il faudrait écrire une Action personnalisé car android.intent.action.MAIN est réservé au système android. J'ai peur que ce soit source de bug.
Du genre "com.kalydia.action.UPDATE".
j'ai crée un nouvelle action
public static Intent ii= new Intent ("android.intent.action.WF");
Je vais essayer de tester les morceaux de code (ça m'intrigue).
EDIT : Effectivement le Service n'est pas lancé (onCreate) donc du coup le getService() est null.
Par contre au lieu d'utiliser un système de listener et du coup de bloquer sur le getService() (à noter que j'ai testé avec un Binder et ça fonctionne).
pour moi ça n'a pas fonctionné, juste j'ai une ou deux question les méthode
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| ServiceConnection connection = new ServiceConnection() {
public void onServiceConnected(ComponentName name, IBinder service) {
Log.i("BackgroundService", "Connected!");
IBackgroundService service1 = ((BackgroundServiceBinder)service).getService();
IBackgroundServiceListener listener = null ;
service1.addListener(listener);
}
public void onServiceDisconnected(ComponentName name) {
Log.i("BackgroundService", "Disconnected!");
}
};
bindService(intent,connection, Context.BIND_AUTO_CREATE); |
je doit faire les appel à l'intérieur de la méthode onCreate de ma classe Activity car il m'affiche une exception de ce type
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
06-06 09:17:02.735: ERROR/AndroidRuntime(447): FATAL EXCEPTION: main
06-06 09:17:02.735: ERROR/AndroidRuntime(447): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kalydia/com.kalydia.WS_SAP_activity}: java.lang.NullPointerException
06-06 09:17:02.735: ERROR/AndroidRuntime(447): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
06-06 09:17:02.735: ERROR/AndroidRuntime(447): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
06-06 09:17:02.735: ERROR/AndroidRuntime(447): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
06-06 09:17:02.735: ERROR/AndroidRuntime(447): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
06-06 09:17:02.735: ERROR/AndroidRuntime(447): at android.os.Handler.dispatchMessage(Handler.java:99)
06-06 09:17:02.735: ERROR/AndroidRuntime(447): at android.os.Looper.loop(Looper.java:123)
06-06 09:17:02.735: ERROR/AndroidRuntime(447): at android.app.ActivityThread.main(ActivityThread.java:4627)
06-06 09:17:02.735: ERROR/AndroidRuntime(447): at java.lang.reflect.Method.invokeNative(Native Method)
06-06 09:17:02.735: ERROR/AndroidRuntime(447): at java.lang.reflect.Method.invoke(Method.java:521)
06-06 09:17:02.735: ERROR/AndroidRuntime(447): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-06 09:17:02.735: ERROR/AndroidRuntime(447): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-06 09:17:02.735: ERROR/AndroidRuntime(447): at dalvik.system.NativeStart.main(Native Method)
06-06 09:17:02.735: ERROR/AndroidRuntime(447): Caused by: java.lang.NullPointerException
06-06 09:17:02.735: ERROR/AndroidRuntime(447): at com.kalydia.WS_SAP_activity.onCreate(WS_SAP_activity.java:48)
06-06 09:17:02.735: ERROR/AndroidRuntime(447): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
06-06 09:17:02.735: ERROR/AndroidRuntime(447): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
06-06 09:17:02.735: ERROR/AndroidRuntime(447): ... 11 more |
voici les méthodes que j'ai ajouté dans ma classe service
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
|
public void onCreate() {
timer = new Timer();
binder = new BackgroundServiceBinder(this);
_onStart();
}
private void _onStart() {
// TODO Auto-generated method stub
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
if(listeners != null){
CallWS();
fireDataChanged(new String());
sendBroadcast(WS_SAP_activity.ii);
}
}}, 0, 60000);
}
public int onStartCommand(Intent intent, int flags, final int startId) {
_onStart();
return START_NOT_STICKY;
} |
Pourquoi ne pas remplacer le fireDataChanged par un sendBroadcast() et du coup utiliser un BroadcastReceiver.