this is my service code
public class MyCustomService extends Service {
public static final String INPUT_TEXT="INPUT_TEXT";
public static final String OUTPUT_TEXT="OUTPUT_TEXT";
private volatile HandlerThread mHandlerThread;
private ServiceHandler mServiceHandler;
public Socket client;
// ...
// Define how the handler will process messages
private final class ServiceHandler extends Handler {
public ServiceHandler(Looper looper) {
super(looper);
}
// Define how to handle any incoming messages here
@Override
public void handleMessage(Message message) {
// ...
// When needed, stop the service with
// stopSelf();
}
}
// Fires when a service is first initialized
public void onCreate() {
super.onCreate();
// An Android handler thread internally operates on a looper.
mHandlerThread = new HandlerThread("MyCustomService.HandlerThread");
mHandlerThread.start();
// An Android service handler is a handler running on a specific background thread.
mServiceHandler = new ServiceHandler(mHandlerThread.getLooper());
}
// Fires when a service is started up
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// Send empty message to background thread
mServiceHandler.sendEmptyMessageDelayed(0, 500);
// or run code in background
mServiceHandler.post(new Runnable() {
@Override
public void run() {
// Do something here in background!
IO.Options opts = new IO.Options();
opts.query = "auth_token=51";
try {
client = IO.socket("http://192.168.0.106:3000/",opts);
client.on("message", onMessage);
client.connect();
} catch (URISyntaxException e) {
e.printStackTrace();
}
// If desired, stop the service
//stopSelf();
}
});
// Keep service around "sticky"
return START_STICKY;
}
// ...
// Defines the shutdown sequence
@Override
public void onDestroy() {
// Cleanup service before destruction
client.disconnect();
client.close();
mHandlerThread.quit();
}
private Emitter.Listener onMessage = new Emitter.Listener() {
@Override
public void call(Object... args) {
String message = (String) args[0];
Log.d("recive message message message", message);
/*create new intent to broadcast our processed data to our activity*/
Intent resultBroadCastIntent = new Intent();
/*set action here*/
//resultBroadCastIntent.setAction(TextCapitalizeResultReceiver.ACTION_TEXT_CAPITALIZED);
resultBroadCastIntent.setAction(Intent.ACTION_SEND);
/*set intent category as default*/
// resultBroadCastIntent.addCategory(Intent.CATEGORY_DEFAULT);
/*add data to intent*/
resultBroadCastIntent.putExtra(OUTPUT_TEXT, message);
/*send broadcast */
sendBroadcast(resultBroadCastIntent);
}
};
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
and i run it from activity this code in onCreate
Intent i = new Intent(this, MyCustomService.class);
i.putExtra("foo", "bar");
startService(i);
problem to me its every time i enter main Activity and its run service twice or 3 or 4 times so when i receive new message by socket its received same message three or Four times
Aucun commentaire:
Enregistrer un commentaire