Skip to content

Commit ea65f88

Browse files
committed
add notification
1 parent 82abede commit ea65f88

File tree

4 files changed

+116
-3
lines changed

4 files changed

+116
-3
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,12 @@
7676
</activity>
7777
<activity android:name=".MainActivity" android:launchMode="singleTask" />
7878
<activity android:name=".LoginActivity"/>
79-
<activity android:name=".ChatActivity" android:launchMode="singleTask" />
79+
<activity android:name=".ChatActivity" android:launchMode="singleTop"
80+
android:parentActivityName=".MainActivity">
81+
<meta-data
82+
android:name="android.support.PARENT_ACTIVITY"
83+
android:value=".MainActivity"/>
84+
</activity>
8085
<activity android:name=".RegisterActivity" />
8186
<activity android:name=".AddFriendActivity" />
8287
<activity android:name=".MessagesActivity" />

app/src/main/java/com/mean/meanchateasemobapi/AppApplication.java

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,29 @@
11
package com.mean.meanchateasemobapi;
22

33

4+
import android.annotation.TargetApi;
45
import android.app.Activity;
56
import android.app.Application;
7+
import android.app.NotificationChannel;
8+
import android.app.NotificationManager;
69
import android.os.Bundle;
10+
import android.util.Log;
711

12+
import com.hyphenate.EMMessageListener;
13+
import com.hyphenate.chat.EMMessage;
814
import com.hyphenate.easeui.EaseUI;
915

1016
import com.hyphenate.chat.EMClient;
1117
import com.hyphenate.chat.EMOptions;
1218

19+
import java.util.List;
20+
1321
public class AppApplication extends Application {
22+
public static final String TAG = "AppApplication";
1423
private volatile Activity currentActivity;
1524
public static Application instance;
25+
private static NotificationChannel notificationChannel;
26+
1627

1728
@Override
1829
public void onCreate() {
@@ -35,9 +46,55 @@ public void onCreate() {
3546
uiOption.setAcceptInvitationAlways(false); //开启好友验证
3647
EaseUI.getInstance().init(this,uiOption);
3748

49+
EMClient.getInstance().chatManager().addMessageListener(new EMMessageListener() {
50+
@Override
51+
public void onMessageReceived(List<EMMessage> messages) {
52+
for(EMMessage message:messages){
53+
Log.d(TAG, "onMessageReceived: "+message.toString());
54+
}
55+
if(currentActivity != null){
56+
return;
57+
}
58+
59+
}
60+
61+
@Override
62+
public void onCmdMessageReceived(List<EMMessage> messages) {
63+
64+
}
65+
66+
@Override
67+
public void onMessageRead(List<EMMessage> messages) {
68+
69+
}
70+
71+
@Override
72+
public void onMessageDelivered(List<EMMessage> messages) {
73+
74+
}
75+
76+
@Override
77+
public void onMessageRecalled(List<EMMessage> messages) {
78+
79+
}
80+
81+
@Override
82+
public void onMessageChanged(EMMessage message, Object change) {
83+
84+
}
85+
});
86+
3887
registerActivityLifecycleCallbacks(new MyActivityLifecycleCallbacks());
3988
}
4089

90+
@TargetApi(26)
91+
public static NotificationChannel getNotificationChannel(){
92+
if(notificationChannel == null){
93+
notificationChannel = new NotificationChannel("chat_msg", "chat message background", NotificationManager.IMPORTANCE_HIGH);
94+
}
95+
return notificationChannel;
96+
}
97+
4198
public Activity getCurrentActivity() {
4299
return currentActivity;
43100
}

app/src/main/java/com/mean/meanchateasemobapi/MainActivity.java

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,17 @@
11
package com.mean.meanchateasemobapi;
22

3+
import android.app.Activity;
4+
import android.app.NotificationChannel;
5+
import android.app.NotificationManager;
6+
import android.app.PendingIntent;
7+
import android.app.TaskStackBuilder;
8+
import android.content.Context;
39
import android.content.DialogInterface;
410
import android.content.Intent;
511
import android.content.IntentFilter;
612
import android.content.pm.PackageManager;
713
import android.net.Uri;
14+
import android.os.Build;
815
import android.os.Bundle;
916
import android.os.Handler;
1017
import android.support.annotation.NonNull;
@@ -13,6 +20,7 @@
1320
import android.support.v4.app.Fragment;
1421
import android.support.v4.app.FragmentActivity;
1522
import android.support.v4.app.FragmentTransaction;
23+
import android.support.v4.app.NotificationCompat;
1624
import android.support.v7.app.AlertDialog;
1725
import android.util.Log;
1826
import android.view.ContextMenu;
@@ -28,7 +36,11 @@
2836
import com.hyphenate.EMError;
2937
import com.hyphenate.EMMessageListener;
3038
import com.hyphenate.chat.EMClient;
39+
import com.hyphenate.chat.EMImageMessageBody;
3140
import com.hyphenate.chat.EMMessage;
41+
import com.hyphenate.chat.EMMessageBody;
42+
import com.hyphenate.chat.EMTextMessageBody;
43+
import com.hyphenate.chat.EMVoiceMessageBody;
3244
import com.hyphenate.easeui.domain.EaseUser;
3345
import com.hyphenate.easeui.widget.EaseTitleBar;
3446
import com.hyphenate.util.NetUtils;
@@ -337,7 +349,47 @@ public void run() {
337349
class MyMessageListener implements EMMessageListener{
338350
@Override
339351
public void onMessageReceived(List<EMMessage> messages) {
340-
chatFragment.refreshChatListFromServer(chatSizeIgnoreSort);
352+
Activity currentActivity = ((AppApplication)AppApplication.instance).getCurrentActivity();
353+
if( (currentActivity instanceof MainActivity && currentFragment == 0) || currentActivity instanceof ChatActivity){
354+
chatFragment.refreshChatListFromServer(chatSizeIgnoreSort);
355+
}else {
356+
if(messages.size()==0){
357+
return;
358+
}
359+
EMMessage message = messages.get(0);
360+
EMMessageBody messageBody = message.getBody();
361+
String messageBodyString;
362+
if(messageBody instanceof EMTextMessageBody){
363+
messageBodyString = ((EMTextMessageBody) messageBody).getMessage();
364+
}else if(messageBody instanceof EMVoiceMessageBody){
365+
messageBodyString = "[语音]";
366+
}else if(messageBody instanceof EMImageMessageBody){
367+
messageBodyString = "[图片]";
368+
}else{
369+
messageBodyString = "[未知类型的消息]";
370+
}
371+
int requestCode = 0;
372+
int flags = PendingIntent.FLAG_UPDATE_CURRENT;
373+
int id = 1;
374+
Intent resultIntent = new Intent(MainActivity.this, ChatActivity.class);
375+
resultIntent.putExtra("username",message.getFrom());
376+
TaskStackBuilder stackBuilder = TaskStackBuilder.create(MainActivity.this);
377+
stackBuilder.addParentStack(ChatActivity.class);
378+
stackBuilder.addNextIntent(resultIntent);
379+
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(requestCode, flags);
380+
NotificationCompat.Builder builder = new NotificationCompat.Builder(getApplicationContext())
381+
.setSmallIcon(R.drawable.ic_launcher)
382+
.setContentTitle(message.getFrom())
383+
.setContentText(messageBodyString)
384+
.setContentIntent(resultPendingIntent)
385+
.setAutoCancel(true);
386+
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
387+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
388+
mNotificationManager.createNotificationChannel(AppApplication.getNotificationChannel());
389+
builder.setChannelId(AppApplication.getNotificationChannel().getId());
390+
}
391+
mNotificationManager.notify(id, builder.build());
392+
}
341393
}
342394

343395
@Override

app/src/main/java/com/mean/meanchateasemobapi/controller/ClientMessageManager.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import android.util.Log;
44

5-
import com.alibaba.fastjson.JSONArray;
65
import com.mean.meanchateasemobapi.model.ClientMessage;
76
import com.mean.meanchateasemobapi.util.SharedPreferenceUtil;
87

0 commit comments

Comments
 (0)