聊天记录是自己的呀~做APP聊天记录肯定是要自己维护才放心的,这是自己的核心数据!聊天历史记录(含图片语音等附件类型),不限容量和条数,环信免费存储14天,超过就覆盖掉,先进先出。环信有提供聊天记录导出接口,建议的做法是每天深夜定时导出当天的聊天记录自己维护,具体可去看下服务端rest api导出聊天记录接口。14天的存储是可付费提升的,具体价格可询问环信商务经理,根据用户数量与存储时长来计算。
以数据方式保存在里手机里,注意不要删除掉,不然是找不回来的。
找恒星啊,我就是找他们的,其他人都是扯淡
专业团队ɋɋ:146-606-79
希望能帮到你,
,
,
,
,
应用程序管理器-滑动屏幕选项(全部)-找到信息-点击进入,清除数据试下。
2、设定-应用程序管理器-滑动屏幕选项(全部)-BadgeProvider点击进入清除数据试下
3、若问题依旧存在(第三方软件引起)。
请备份手机数据( *** 薄、短信息、多媒体资料等),将手机恢复出厂设置尝试(设定-重置-恢复出厂设定)。
注:存储在手机中的数据全部丢失,一定要提前备份到sim卡和sd卡中再操作。
若问题仍然存在,请将手机送至就近的服务中心进行检测。
进入C:\Windows\system32,在下面寻找计算器程序calc.exe。如果能找到,右键发送到桌面快捷方式,把快捷方式改名为计算器,然后拖动到C:
\Users(用户)\用户名\AppData\Roaming\Microsoft\Windows\「开始」菜单\程序\附件 文件夹下面。如果找不到,从网上下载一个Win7的
calc.exe,放到C:\Windows\system32下,然后再按上述步骤操作。
@是重量单位和容积单位;后来又成了工程用语;然后又成了DOS命令,如常用语句"@echo off";再之一开始是a-tail的缩写,表示长尾巴的a,后来
大众普遍当做是表示英文单词"at",后来这种用法逐渐减少了,可是又多了两种用法:1.邮箱用户名与域名之间的间隔符理应用"at"却用"@"代
替;2.表示单价,比如"Sell@1 pound"表示以1英镑的单价出售,这两种用法使用频率之高难以想象。"@"根据"at"的读音读"艾尔特"或"艾特",另
外,由于 *** 用语越来越时髦,"@"又被"爆炒"出了3种用法:1.@时代即 *** 时代;2.@是很酷的一个表情,表示开心、高兴等;3.@族即14-29岁的人
。
const int a; int const a; 这两个写法是等同的,表示a是一个int常量。
const int *a; 表示a是一个指针,可以任意指向int常量或者int变量,它总是把它所指向的目标当作一个int常量。也可以写成int const* a;含
义相同。
int * const a; 表示a是一个指针常量,初始化的时候必须固定指向一个int变量,之后就不能再指向别的地方了。
int const * a const;这个写法没有,倒是可以写成int const * const a;表示a是一个指针常量
constintfun(){}表示函数不能为左值。必须用一个变量来接收他得返回例如:inta=constintfun();//正确constintfun();//直接调用会报错
intfun()const{}这个表示类中的const成员也能调用这个函数。
excel自定义函数(而不是函数)调用excel的自带函数时,在函数前加上这个引用就可以了。即:Application.WorksheetFunction.+函数名 excel
函数: Excel是办公室自动化中非常重要的一款软件。Excel中所提的函数其实是一些预定义的公式
如果是e.getSource()是获取发起事件的控件对象。 e.getSource()==button1用来判断发起事件的控件是不是button1。
按性质分:
(1)实义动词(及物动词,不及物动词,联系动词)
(2)助动词
(3)情态动
按时限分类:
(1)延续性动词
(2)非延续性动词
按功能分:
(1)谓语动词
(2)不定式
(3)动名词
(4)现在分词
(5)过去分词
系动词,感官动词,还有使役动词是包括在以上类别中的特殊动词1.系动词包括BE动词和由行为动词转化来的如:look,seem
,appear, *** ell,taste,become,grow很多.要在实际学习中不断掌握2.感官动词:是指看,听,闻,尝等与感官有关的动词,其中有些也可做系动词.3.
使役动词:have,make,let等,只可翻译成使某人做某事,让某人做某事的词动词是英语中最重要的词,也是最难的,分类并不重要,要在具体情况中明
白动词的用法,时态和语态.
可以发送文本消息和表情、语音消息、图片消息、地理位置消息以及文件消息。
发送文本消息及表情
//获取到与聊天人的会话对象。参数username为聊天人的userid或者groupid,后文中的username皆是如此
EMConversation conversation = EMChatManager.getInstance().getConversation(username);
//创建一条文本消息
EMMessage message = EMMessage.createSendMessage(EMMessage.Type.TXT);
//如果是群聊,设置chattype,默认是单聊
message.setChatType(ChatType.GroupChat);
//设置消息body
TextMessageBody txtBody = new TextMessageBody(content);
message.addBody(txtBody);
//设置接收人
message.setReceipt(username);
//把消息加入到此会话对象中
conversation.addMessage(message);
//发送消息
EMChatManager.getInstance().sendMessage(message, new EMCallBack(){});
发送语音消息
EMConversation conversation = EMChatManager.getInstance().getConversation(username);
EMMessage message = EMMessage.createSendMessage(EMMessage.Type.VOICE);
//如果是群聊,设置chattype,默认是单聊
message.setChatType(ChatType.GroupChat);
VoiceMessageBody body = new VoiceMessageBody(new File(filePath), len);
message.addBody(body);
message.setReceipt(username);
conversation.addMessage(message);
EMChatManager.getInstance().sendMessage(message, new EMCallBack(){});
发送图片消息
EMConversation conversation = EMChatManager.getInstance().getConversation(username);
EMMessage message = EMMessage.createSendMessage(EMMessage.Type.IMAGE);
//如果是群聊,设置chattype,默认是单聊
message.setChatType(ChatType.GroupChat);
ImageMessageBody body = new ImageMessageBody(new File(filePath));
// 默认超过100k的图片会压缩后发给对方,可以设置成发送原图
// body.setSendOriginalImage(true);
message.addBody(body);
message.setReceipt(username);
conversation.addMessage(message);
EMChatManager.getInstance().sendMessage(message, new EMCallBack(){});
发送地理位置消息
EMConversation conversation = EMChatManager.getInstance().getConversation(username);
EMMessage message = EMMessage.createSendMessage(EMMessage.Type.LOCATION);
//如果是群聊,设置chattype,默认是单聊
message.setChatType(ChatType.GroupChat);
LocationMessageBody locBody = new LocationMessageBody(locationAddress, latitude, longitude);
message.addBody(locBody);
message.setReceipt(username);
conversation.addMessage(message);
EMChatManager.getInstance().sendMessage(message, new EMCallBack(){});
发送文件消息
EMConversation conversation = EMChatManager.getInstance().getConversation(username);
// 创建一个文件消息
EMMessage message = EMMessage.createSendMessage(EMMessage.Type.FILE);
// 如果是群聊,设置chattype,默认是单聊
if (chatType == CHATTYPE_GROUP)
message.setChatType(ChatType.GroupChat);
//设置接收人的username
message.setReceipt(username);
// add message body
NormalFileMessageBody body = new NormalFileMessageBody(new File(filePath));
message.addBody(body);
conversation.addMessage(message);
EMChatManager.getInstance().sendMessage(message, new EMCallBack(){});
接收消息
通过广播接收新消息
注意事项:为了防止新消息来时,因为没有注册广播接收者,导致漏接消息的情况,注册完接受者以及好友监听等事件后,需要调用以下 SDK 才会发送新消息的广播,只需调用一次即可,可参考 Demo 的 mainactivity。
EMChat.getInstance().setAppInited()
另外,当 APP 在后台时,SDK 默认以 notification 的形式通知有新消息,不会走广播,如果需要走广播,可以调用以下 SDK 关闭 notification 通知,这样新消息还是走发送广播的形式。
EMChatManager.getInstance().getChatOptions().setShowNotificationInBackgroud(false)
注册一个相应 broadcast,用来接收消息。
NewMessageBroadcastReceiver msgReceiver = new NewMessageBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter(EMChatManager.getInstance().getNewMessageBroadcastAction());
intentFilter.setPriority(3);
registerReceiver(msgReceiver, intentFilter);
private class NewMessageBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//消息id
String msgId = intent.getStringExtra("msgid");
//发消息的人的username(userid)
String msgFrom = intent.getStringExtra("from");
//消息类型,文本、图片、语音消息等,这里返回的值为msg.type.ordinal()。
//所以消息type实际为是enum类型
int msgType = intent.getIntExtra("type", 0);
Log.d("main", "new message id:" + msgId + " from:" + msgFrom + " type:" + msgType);
//更方便的 *** 是通过msgId直接获取整个message
EMMessage message = EMChatManager.getInstance().getMessage(msgId);
}
}
通过监听事件来接收新消息
注意事项:注册消息事件监听,此 listener 会收到所有类型的 event 事件,如果对某种或某些类型的事件感兴趣,可以用 registerEventListener(EMEventListener listener, EMNotifierEvent.EventType[] types)。
EMNotifierEvent.Event.EventDeliveryAck;//已发送回执event注册
EMNotifierEvent.Event.EventNewCMDMessage;//接收透传event注册
EMNotifierEvent.Event.EventNewMessage;//接收新消息event注册
EMNotifierEvent.Event.EventOfflineMessage;//接收离线消息event注册
EMNotifierEvent.Event.EventReadAck;//已读回执event注册
EMNotifierEvent.Event.EventConversationListChanged;//通知会话列表通知event注册(在某些特殊情况,SDK去删除会话的时候会收到回调监听)
接收所有的 event 事件:
EMChatManager.getInstance().registerEventListener(new EMEventListener() {
@Override
public void onEvent(EMNotifierEvent event) {
// TODO Auto-generated method stub
EMMessage message = (EMMessage) event.getData();
}
});
有选择性的接收某些类型 event 事件:
EMChatManager.getInstance().registerEventListener(new EMEventListener() {
@Override
public void onEvent(EMNotifierEvent event) {
// TODO Auto-generated method stub
EMMessage message = (EMMessage) event.getData();
}
}, new EMNotifierEvent.Event[]{EMNotifierEvent.Event.EventNewMessage,.......}
);
注:广播和监听事件不可同时混用。
解除监听事件
如果不想收到回调,则执行解除监听事件。
EMChatManager.getInstance().unregisterEventListener(new EMEventListener() {
@Override
public void onEvent(EMNotifierEvent event) {
// TODO Auto-generated method stub
}
});
获取聊天记录
EMConversation conversation = EMChatManager.getInstance().getConversation(username|groupid);
//获取此会话的所有消息
ListEMMessage messages = conversation.getAllMessages();
//sdk初始化加载的聊天记录为20条,到顶时需要去db里获取更多
//获取startMsgId之前的pagesize条消息,此 *** 获取的messages sdk会自动存入到此会话中,app中无需再次把获取到的messages添加到会话中
ListEMMessage messages = conversation.loadMoreMsgFromDB(startMsgId, pagesize);
//如果是群聊,调用下面此 ***
ListEMMessage messages = conversation.loadMoreGroupMsgFromDB(startMsgId, pagesize);
消息管理(单一聊天人、所有聊天人)
获取未读消息数量
EMConversation conversation = EMChatManager.getInstance().getConversation(username|groupid);
conversation.getUnreadMsgCount();
未读消息数清零
指定会话消息未读数清零。
EMConversation conversation = EMChatManager.getInstance().getConversation(username|groupid);
conversation.markAllMessagesAsRead();
所有未读消息数清零
EMChatManager.getInstance().markAllConversationsAsRead();
获取消息总数
EMConversation conversation = EMChatManager.getInstance().getConversation(username|groupid);
conversation.getMsgCount();
清空会话聊天记录
//清空和某个user的聊天记录(包括本地),不删除conversation这个会话对象
EMChatManager.getInstance().clearConversation(username|groupid);
删除单个聊天记录
//删除和某个user的整个的聊天记录(包括本地)
EMChatManager.getInstance().deleteConversation(username|groupid);
//删除当前会话的某条聊天记录
EMConversation conversation = EMChatManager.getInstance().getConversation(username|groupid);
conversation.removeMessage(deleteMsg.msgId);
删除所有聊天记录
//删除所有会话记录(包括本地)
EMChatManager.getInstance().deleteAllConversation();
设置某条消息为已读
//markAsRead为true,则标记msgid的消息位已读
conversation.getMessage({msgid},markAsRead);
设置自定义的消息提示
APP 在后台时,新消息会通过 notification 的方式,在手机状态栏提示新消息,可以把提示的内容换成自定义的内容(在application的oncreate()里设置)。
//获取到配置options对象
EMChatOptions options = EMChatManager.getInstance().getChatOptions();
//设置自定义的文字提示
options.setNotifyText(new OnMessageNotifyListener() {
@Override
public String onNewMessageNotify(EMMessage message) {
//可以根据message的类型提示不同文字,这里为一个简单的示例
return "你的好基友" + message.getFrom() + "发来了一条消息哦";
}
@Override
public String onLatestMessageNotify(EMMessage message, int fromUsersNum, int messageNum) {
return fromUsersNum + "个基友,发来了" + messageNum + "条消息";
}
});
设置自定义 notification 点击跳转 intent。
用户点击 notification 消息,SDK 会有默认的跳转 intent,开发者可以设置自己的跳转 intent,这里以 UIdemo 的代码为例。
// 获取到EMChatOptions对象
EMChatOptions options = EMChatManager.getInstance().getChatOptions();
//设置notification点击listener
options.setOnNotificationClickListener(new OnNotificationClickListener() {
@Override
public Intent onNotificationClick(EMMessage message) {
Intent intent = new Intent(applicationContext, ChatActivity.class);
ChatType chatType = message.getChatType();
if(chatType == ChatType.Chat){ //单聊信息
intent.putExtra("userId", message.getFrom());
intent.putExtra("chatType", ChatActivity.CHATTYPE_SINGLE);
}else{ //群聊信息
//message.getTo()为群聊id
intent.putExtra("groupId", message.getTo());
intent.putExtra("chatType", ChatActivity.CHATTYPE_GROUP);
}
return intent;
}
});
新消息提示
SDK 中提供了方便的新消息提醒功能。可以在收到消息时调用,提醒用户有新消息。
首先获取EMChatOptions。
chatOptions = EMChatManager.getInstance().getChatOptions();
设置是否启用新消息提醒(打开或者关闭消息声音和震动提示)。
chatOptions.setNotifyBySoundAndVibrate(true|false); //默认为true 开启新消息提醒
设置是否启用新消息声音提醒。
chatOptions.setNoticeBySound(true|false); //默认为true 开启声音提醒
设置是否启用新消息震动提醒。
chatOptions.setNoticedByVibrate(true|false); //默认为true 开启震动提醒
设置语音消息播放是否设置为扬声器播放。
chatOptions.setUseSpeaker(true|false); //默认为true 开启扬声器播放
设置后台接收新消息时是否通过通知栏提示。
chatOptions.setShowNotificationInBackgroud(true|false) //默认为true
附:
chatOptions.setAcceptInvitationAlways(false);
//默认添加好友时为true,是不需要验证的,改成需要验证为false
微信聊天记录是怎么拍下来的 亲:用电脑登陆您的微信(在百度输入微信网页版,用手机扫一扫里面的二维码,在手机点确认登陆),这样的话,您跟您的好友的聊天记录就会出现在电脑屏幕,您就可以拍下来啦。希望能帮助...
手机聊天记录怎样找回来? 方法二:利用微信自带的故障修复功能 一部分删除的微信记录还可以借助微信的故障修复功能进行恢复,比如手机内存不足,微信突然闪退,或者微信系统出现问题,导致微信无法正常使用,这种...
中国最有影响力的黑客是谁? 1、截至2023年,中国最牛的“黑客”是袁仁广。袁仁广,男,中国国家信息安全漏洞库特聘专家,北京奥运会特聘信息安全专家,现任腾讯湛泸实验室负责人。提起袁任广,知道的人或许并...
应聘没去入职发现简历被挂朋友圈,这侵犯了应聘者什么权益? 郭女士在杭州找工作期间,通过了一家公司的面试,所应聘公司的人事部门负责人陈经理,按照流程向郭女士发出了入职通知书,意味着郭女士和陈经理双方已经...
如何保存微信群聊的聊天记录? 有以下三种方法,可以把微信群聊中的聊天记录保存到电脑:方法一,PC版微信备份手机微信聊天记录到电脑1,将手机与电脑连接到同一个WIFI下,然后在电脑上使用PC版微信,可备...
我和后妈的亲密接触为题写一篇600字以上的作文 “慈母手中线,游子身上衣,临行密密缝,意恐迟迟归,谁言寸草心,报得三春晖.”每当我读起这些诗的时候,我就会想起我伟大的母亲.我已不记得母亲在我还是个顽童...