关于在Service中无法接收消息的问题


(myplxdm) #1

为了尽量在后台能接收到极光的消息,我将接收代码写在Service中,并设置android:process,但是设置后无法收到消息,如果取消这个process就可以成功接收,请问有解决方法吗?
compile ‘cn.jiguang.sdk:jmessage:2.7.0’
compile ‘cn.jiguang.sdk:jcore:1.2.3’


#2

你是如何写的?在设置之后,是否有集成成功,长连接是否有连上,看客户端日志信息


(myplxdm) #3

Service部分代码:

public void onCreate()
{
        recver = new JMsgRecver(this);
        JMessageClient.setDebugMode(true);
        JMessageClient.init(this);
        JMessageClient.login("xxx", "xxx", new BasicCallback()
        {
            @Override
            public void gotResult(int responseCode, String responseMessage)
            {
                Toast.makeText(GoKLService.this, "responseCode = " + responseCode, Toast.LENGTH_SHORT).show();
                if (responseCode == 0)
                {
                    JMessageClient.registerEventReceiver(recver);
                }
            }
        })
;
}

JMsgRecver中部分代码

public JMsgRecver(Context context)
{
        mContext = context;
        player = new MediaPlayer();
        handler = new Handler(Looper.getMainLooper());
}
public void onEvent(MessageEvent event)
{
        Message msg = event.getMessage();
        handler.post(new Runnable()
        {
            @Override
            public void run()
            {
                Toast.makeText(mContext, "onEvent", Toast.LENGTH_SHORT).show();
            }
       });
       LogUtils.LOGD(getClass(), "onEvent");
}

然后在JMsgRecver中写public void onEvent(MessageEvent event)方法,但不被调用。
关键是我把配置Service中的android:process去掉就正常接收了
logjmessage.txt (484.2 KB)
logjmessage(1).txt (929.9 KB)


(myplxdm) #4

不知道为什么修改后上传文件显示不正常,重新上传一下logjmessage.txt (484.2 KB)
logjmessage(1).txt (929.9 KB)


#5

经研发分析

JMessage的其他一些组件也是配置在应用进程的。你这里只有serviece进程分离


(myplxdm) #6

那我是不是要修改成手动集成,然后把android:name=“cn.jpush.android.service.PushService” 这个Service也使用和我Service一样的process配置就行了?


#7

研发说 pushservice process不用改,其他的组件都要改


(myplxdm) #8

我修改成这样不行,但是一样接收不到,请问要怎么修改?我还是用自动集成,然后再在xml里面添加上下面的配置

    <receiver
        android:process=":go_service"
        android:name="cn.jpush.android.service.PushReceiver"
        android:enabled="true"
        android:exported="false">
        <intent-filter android:priority="1000">
            <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" />
            <category android:name="com.liu.alibrarytest" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.USER_PRESENT" />
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        </intent-filter>
        <!-- Optional -->
        <intent-filter>
            <action android:name="android.intent.action.PACKAGE_ADDED" />
            <action android:name="android.intent.action.PACKAGE_REMOVED" />
            <data android:scheme="package" />
        </intent-filter>
    </receiver>

    <!-- Required SDK核心功能-->
    <receiver
        android:process=":go_service"
        android:name="cn.jpush.android.service.AlarmReceiver"
        android:exported="false" />

    <!-- Required JMessage SDK核心功能-->
    <receiver
        android:process=":go_service"
        android:name="cn.jpush.im.android.helpers.IMReceiver"
        android:enabled="true"
        android:exported="false">
    </receiver>

(jinfengf) #9

provider未修改


(myplxdm) #10

非常感谢,可以了


(myplxdm) #11

请教一下,onEvent 是同步一条一条按顺序调用吗?


(jinfengf) #12

默认模式是在Event发布的线程中执行,如果发布是不同的线程,那这些onEvent也是在不同线程执行。