Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用Android服务的套接字Io大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
美好的一天.虑到用于 Android的Socket IO库及其服务,我有一个非常具体的问题.

重要的是,我的设备是我正在测试的huawei p8 lite.

在这里

我有一个套接字Io库,它正在我创建的服务中初始化

•我将侦听器设置为套接字io以获取新消息

•如果应用程序未在用户的进程中被杀死,则所有内容都像char一样工作.

•服务的目的是即使应用程序被终止也要保持套接字IO连接处于活动状态,以便用户通知新消息.

•一旦应用程序被终止,Socket IO连接就会断开连接

无论我尝试什么,我都会尝试所有可能的方法:隔离服务流程,为服务提供另一个流程,启动它粘性,启动它不会在服务破坏等时重新创建等等.

唯一有效的是startForeground()方法,但我不想使用它,因为它将遵循设计原则,而且我不想显示有关正在运行的服务的任何通知.

我的问题是下一个:任何人都可以帮助我并告诉我如何保持Socket IO连接活着,即使应用程序被杀死了?

这是服务的代码.

@H_674_29@package com.github.nkzawa.socketio.androidchat; import android.app.Notification; import android.app.notificationmanager; import android.app.pendingIntent; import android.app.service; import android.content.Context; import android.content.Intent; import android.os.IBinder; import android.support.Annotation.Nullable; import android.support.v4.app.NotificationCompat; import android.util.Log; import android.widget.Toast; import java.net.URISyntaxException; import io.socket.client.IO; import io.socket.client.socket; import io.socket.emitter.Emitter; public class Socketservice extends service { private Socket mSocket; public static final String TAG = Socketservice.class.getSimplename(); @Override public IBinder onBind(Intent intent) { // TODO: Return the communication chAnnel to the service. throw null; } @Override public void onCreate() { super.onCreate(); Toast.makeText(this,"on created",Toast.LENGTH_SHORT).show(); } @Override public int onStartCommand(Intent intent,int flags,int startId) { Toast.makeText(this,"start command",Toast.LENGTH_SHORT).show(); try { mSocket = IO.socket(Constants.CHAT_SERVER_URL); } catch (URISyntaxException E) { throw new RuntimeException(E); } mSocket.on("newmessageReceived",onNewmessagE); mSocket.connect(); return START_STICKY; } private Emitter.Listener onNewmessage = new Emitter.Listener() { @Override public void call(Object... args) { String message = args[0].toString(); Log.d(tag,"call: new message "); sendGeneralNotification(getApplicationContext(),"1","new message",message,null); } }; private void sendGeneralNotification(Context context,String uniquEID,String title,String contentText,@Nullable Class<?> resultClass) { notificationmanager notificationmanagerCompat = (notificationmanager) context.getSystemservice(NOTIFICATION_serviCE); android.support.v7.app.NotificationCompat.builder builder = new android.support.v7.app.NotificationCompat.builder(context); builder.setAutoCancel(true); builder.setContenttitle(titlE); builder.setContentText(contentText); builder.setGroup("faskfjasfa"); builder.setDefaults(android.app.Notification.DEFAULT_ALL); builder.setStyle(new NotificationCompat.bigTextStyle() .setSumMaryText(titlE) .setBigContenttitle(titlE) .bigText(contentText) ); Intent requestsViewIntent = new Intent(context,MainActivity.class); requestsViewIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); requestsViewIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); PendingIntent requestsViewPending = PendingIntent.getActivity(context,Integer.valueOf(uniquEID),requestsViewIntent,0); builder.setContenTintent(requestsViewPending); builder.setsmallIcon(R.drawable.ic_launcher); builder.setShowWhen(true); android.app.Notification notification = builder.build(); notificationmanagerCompat.notify(Integer.valueOf(uniquEID),notification); } private Notification getNotification() { Notification notification; NotificationCompat.builder builder = new NotificationCompat.builder(this); builder.setColor(getresources() .getColor(R.color.material_deep_teal_500)) .setAutoCancel(true); notification = builder.build(); notification.flags = Notification.FLAG_FOREGROUND_serviCE | Notification.FLAG_AUTO_CANCEL; return notification; } }

不,我不想既不使用firebase也不想使用任何第三方制造的,因为我现在正在使用一个,而且我受到延迟,未收到的通知等等,我将使我自己的小方法更好.感谢大家的时间和耐心.

@L_696_38@

很抱歉,没有人快速回复您的问题.我希望情人节2018不会花在别人的痛苦上.

后台实现Socket.io并不是最好的想法. Socket.io对您的服务器有一个活动的ping.在短时间内使用它是可以的,但在后台它是NO.

解决问题的最佳方法是结合Socket.io和FCM / GCM主题发出广播.在用户设备上,检测是否存在活动的Socket.io连接,如果退出则忽略FCM,否则执行FCm.

大佬总结

以上是大佬教程为你收集整理的使用Android服务的套接字Io全部内容,希望文章能够帮你解决使用Android服务的套接字Io所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。