精华内容
下载资源
问答
  • C#编写的通讯录管理系统,C#源代码程序,有添加删除、修改、首页、上一页、下一页、页等功能VisualStudio2008创建
  • 一:前面两篇说了Openfire服务器的搭建和注册登录,接...二:获取用户的所有好友XMPPTCPConnection connection /** * 获得所有联系人 */ public Roster getContact() { Roster roster = Roster.getInstanceFor(conn

    一:前面两篇说了Openfire服务器的搭建和注册登录,接下来就是重点了,实现与好友之间的聊天。

    二:获取用户的所有好友

    XMPPTCPConnection connection

        /**
         * 获得所有联系人
         */
        public Roster getContact() {
            Roster roster = Roster.getInstanceFor(connection);
            //获得所有的联系人组
            Collection<RosterGroup> groups = roster.getGroups();
            for (RosterGroup group : groups) {
                //获得每个组下面的好友
                List<RosterEntry> entries = group.getEntries();
                for (RosterEntry entry : entries) {
                    //获得好友基本信息
                    entry.getUser();
                    entry.getName();
                    entry.getType();
                    entry.getStatus();
                }
            }
            return roster;
        }

    三:由于Smack没有提供获取历史聊天记录的Api(本人一直没有找到)所以对于聊天记录、聊天列表这一块需要自己设计数据库用来保存聊天信息;我这里就对一些重点的Api方法进行整理。

    1. 用户一上线获取离线消息,注意:要获取离线消息需要在获取XMPPTCPConnection时将登录状态设置为离线不然获取不到
    XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
                            //....
                            //设置登录状态
                            .setSendPresence(false)
                             //....
                 XMPPTCPConnection  connection = new XMPPTCPConnection(config);
    1. 获取离线消息
        /**
         * 一上线获取离线消息
         * 设置登录状态为在线
         */
        private void getOfflineMessage() {
            OfflineMessageManager offlineManager = new OfflineMessageManager(connection);
            try {
                List<Message> list = offlineManager.getMessages();
                //删除离线消息
                offlineManager.deleteMessages();
                //将状态设置成在线
                Presence presence = new Presence(Presence.Type.available);
                connection.sendStanza(presence);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    四:发送一条消息,可以使用之前安装的Spark进行测试了

     try {
                ChatManager manager =  ChatManager.getInstanceFor(connection);
                Chat chat =  manager.createChat("azhon@10.104.179.23",null);
                chat.sendMessage("HelloWord");
            } catch (SmackException.NotConnectedException e) {
                e.printStackTrace();
            }

    manager.createChat(userJID, null); userJID一定是用户名@服务器ip地址否则无法发出消息

    五:既然可以发送消息了,那么当然也可以获取到对方发送给你的消息了。

        /**
         * 初始化聊天消息监听
         */
        public void initListener() {
            ChatManager manager = ChatManager.getInstanceFor(connection);
            //设置信息的监听
            final ChatMessageListener messageListener = new ChatMessageListener() {
                @Override
                public void processMessage(Chat chat, Message message) {
                    //当消息返回为空的时候,表示用户正在聊天窗口编辑信息并未发出消息
                    if (!TextUtils.isEmpty(message.getBody())) {
                        //message为用户所收到的消息
                    }
                }
            };
            ChatManagerListener chatManagerListener = new ChatManagerListener() {
    
                @Override
                public void chatCreated(Chat chat, boolean arg1) {
                    chat.addMessageListener(messageListener);
                }
            };
            manager.addChatListener(chatManagerListener);
        }

    六:添加一个好友与好友请求监听

        /**
         * 添加好友
         *
         * @param user帐号
         * @param nickName  昵称
         * @param groupName 组名
         */
        Roster.getInstanceFor(connection).createEntry("azhon@10.104.179.23", "", null);
    
    
        /**
         * 添加好友请求信息监听
         */
        public void addFriendListener() {
            //条件过滤
            StanzaFilter filter = new AndFilter();
            StanzaListener listener = new StanzaListener() {
                @Override
                public void processPacket(Stanza packet) throws SmackException.NotConnectedException {
                    DiscoverInfo p = (DiscoverInfo) packet;
                    //p中可以得到对方的信息
                    if (p.getType().toString().equals("subscrib")) {
                        //好友申请
                    } else if (p.getType().toString().equals("subscribed")) {
                        //通过了好友请求
                    } else if (p.getType().toString().equals("unsubscribe")) {
                        //拒绝好友请求
                    }
                }
            };
            connection.addAsyncStanzaListener(listener, filter);
        }

    下面就是本人实现的一个大概聊天界面,勉强实现了一个单聊功能。

    这里写图片描述

    展开全文
  • 问题表现:输入新添加的收件,点击检查名称后 但是在显示其他名称中可以找到 原因:Outlook使用Exchange缓存模式导致 解决方案: 一、出现不能及时同步时,可以退出Outlook后手动清理本地通讯簿缓存,以强制下载...

    问题表现:输入新添加的收件人,点击检查名称后
    在这里插入图片描述
    但是在显示其他名称中可以找到

    原因:Outlook使用Exchange缓存模式导致

    解决方案:
    一、出现不能及时同步时,可以退出Outlook后手动清理本地通讯簿缓存,以强制下载最新通讯簿:
    ①退出Outlook
    ②删除C:\Users%USERNAME%\AppData\Local\Microsoft\Outlook\Offline Address Books文件夹
    二、运行配处理即可(附批处理内容如下)
    @echo off
    taskkill /f /im outlook.exe
    cd C:\Users%USERNAME%\AppData\Local\Microsoft\Outlook
    rd /s /q “Offline Address Books”

    Pause

    展开全文
  • 自定义组是为了方便您管理某些用户并快速发起操作而设置的分组,... 添加为了便于工作,您可以设置自定义组,并添加相关联系人。如“A项目组”等。 打开主面板联系人菜单,点击"添加自定义组",即添加自定义组。单击该
    自定义组是为了方便您管理某些用户并快速发起操作而设置的分组,您可以将某些人归纳为小组收藏于此。比如,您可以创建分组“篮球队”,其中包括“小张、小王”等,必要时对他们发起会话,或者对其中一个人发起会话。该自定义组仅为您自己便于整理而设置的组,其他用户不可见。 添加为了便于工作,您可以设置自定义组,并添加相关联系人。如“A项目组”等。 打开主面板联系人菜单,点击"添加自定义组",即添加自定义组。单击该组,可显示其中的成员。当然,您也可以对其中的某一成员发起操作。 重命名用鼠标右键单击某自定义组,选择“自定义组设置”即可重新命名该组。 删除用鼠标右键单击某自定义组,选择“删除自定义组”即可删除该组。 
    展开全文
  • Androidの联系人群组Group操作示例

    千次阅读 2015-03-05 16:33:13
    Androidの联系人群组Group操作示例 1. 添加群组group // create a group ContentValues values = new ContentValues(); values.put(ContactsContract.Groups.TITLE, “GROUPNAME”); Uri uri = getContentResolver()...
    Androidの联系人群组Group操作示例
    首先看下源码示例,(源码最后面下载),

    然后,我们看下相关基础查询使用,然后在看代码。。
    1. 添加群组group
    // create a group
    ContentValues values = new ContentValues();
    values.put(ContactsContract.Groups.TITLE, “GROUPNAME”);
    Uri uri = getContentResolver().insert(ContactsContract.Groups.CONTENT_URI, values);
    其中GROUPNAME是要创建的Group的名称。
    2. 删除一个Group
    // delete a group
    // 做删除标志,但未真正删除。真正的删除会在同步时自动实现
    // getContentResolver().delete(ContactsContract.Groups.CONTENT_URI, ContactsContract.Groups._ID + " = " + raw_group_id, null);
    	
    // 真正意义上的删除
    Uri uri = ContentUris.withAppendedId(ContactsContract.Groups.CONTENT_URI, raw_group_id);
    Uri.Builder b = uri.buildUpon();
    b.appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true");
    uri = b.build();
    getContentResolver().delete(uri, null, null);
    其中raw_group_id是Group的ID,对应的是ContactsContract.Groups中的_ID字段
    3. 查询所有的Group
    // query all groups
    Cursor groupCursor = getContentResolver().query(ContactsContract.Groups.CONTENT_URI, 
    	new String[]{ContactsContract.Groups.TITLE, ContactsContract.Groups._ID}, 
    	null, 
    	null, 
    	null);
    查询出所有Group的名称和ID。
    4. 更改指定Group的名称
    // update a group
    ContentValues values = new ContentValues();
    values.put(ContactsContract.Groups.TITLE, "NEWGROUPTITLE");
    getContentResolver().update(ContactsContract.Groups.CONTENT_URI, 
    	values, 
    	ContactsContract.Groups._ID + " = " + raw_group_id, 
    	null);
    其中NEWGROUPTITLE是新取的Group名称,raw_group_id是Group的ID。
    5. 查询一个Group中的所有联系人
    // To query all contacts in a group
    
    // First, query the raw_contact_ids of all the contacts in the group
    Cursor groupContactCursor = getContentResolver().query(Data.CONTENT_URI, 
    	new String[]{Data.RAW_CONTACT_ID}, 
    	Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE + "' AND " + ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID + " = " + raw_group_id, 
    	null, 
    	null);
    
    // Second, query the corresponding name of the raw_contact_id
    while(groupContactCursor.moveToNext())
    {
    	Cursor contactCursor = getContentResolver().query(Data.CONTENT_URI, 
    	new String[]{Data.RAW_CONTACT_ID, StructuredName.FAMILY_NAME, StructuredName.GIVEN_NAME}, 
    	Data.MIMETYPE + "='" + StructuredName.CONTENT_ITEM_TYPE + "' AND " + Data.RAW_CONTACT_ID + "=" + groupContactCursor.getInt(0), 
    	null, 
    	null);
    	contactCursor.moveToNext();
    	Log.e("TestContractGroupOperationActivity", "Member name is: " + contactCursor.getString(1) + " " + contactCursor.getString(2));
    	contactCursor.close();
    }
    groupContactCursor.close();
    6. 从Group中删除某个联系人
    // Delete a contact from a group
    Uri uri = Data.CONTENT_URI;
    Uri.Builder b = uri.buildUpon();
    b.appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true");
    uri = b.build();
    			
    getContentResolver().delete(uri, Data.RAW_CONTACT_ID + "=" + raw_contact_id + " AND " + ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID + " =" + raw_group_id, null);
    从ID为raw_group_id的Group中,删除ID为raw_contact_id的Contact。
    7. 查询某个联系人处于那几个Group中
    // First, query all the group ids that a contact is in
    Cursor groupCursor = getContentResolver().query(Data.CONTENT_URI, 
    	new String[]{ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID}, 
    	ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE + "='" + ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE +"' AND " + Data.RAW_CONTACT_ID + " = " + raw_contact_id, 
    	null, 
    	null);
    			
    // Second, get all the corresponding group names
    while(groupCursor.moveToNext())
    {
    	Cursor groupNameCursor = getContentResolver().query(ContactsContract.Groups.CONTENT_URI, 
    		new String[]{ContactsContract.Groups.TITLE}, 
    		ContactsContract.Groups._ID + "=" + groupCursor.getInt(0), 
    		null, 
    		null);
    	groupNameCursor.moveToNext();
    	Log.e("Test", groupNameCursor.getString(0));
    	groupNameCursor.close();
    }
    groupCursor.close();

    其中raw_contact_id是联系人的ID。

    需要注意的是,groupCursor中所包含的group_raw_id有可能重复,为了消除这种重复,可以将groupCursor中的内容倒入到一个Set容器中,再根据Set容器中的元素(具有唯一性的group_raw_id),查找其对应的Group的名称。


    *相关联系人群组查询,讲解文章:

    * 源码下载
    展开全文
  • 企业微信外部联系人回调事件

    千次阅读 2019-02-22 10:20:22
    企业微信外部联系人回调事件 说明: 1) 下列&amp;quot;外部联系人&amp;quot; 和 &amp;quot;客户联系&amp;quot; 其实都是一个意思,都是指顾客,但是由于企业微信开发文档中叫&amp;quot;外部联系人&...
  • 普通的联系人列表,无法选择联系人或回调,只能查看详情 Intent intent = new Intent(); intent.setClassName("com.android.contacts", "com.android.contacts.activities.PeopleActivity"); ...
  • 仿Android联系人SideBar排序,根据拼音A-Z字母快速查找,以及输入搜索条件过滤,显示姓名的文字图片。 这样的效果相信大家并不陌生,我们在APP中都司空见惯了,比如在选择地址的时候,选择国家,省份
  • Android contacts 联系人 通讯录 源码 完全解析 1简介2软件架构3各功能模块分析 1联系人数据的显示 ...1Sim卡联系人数据的显示2开机自动导入Sim卡联系人3telephony中IccProvider浅析4Sim卡联系
  • Android 之联系人提供程序

    千次阅读 2016-03-13 12:14:48
     联系人提供程序是一个强大而又灵活的 Android 组件,用于管理设备上有关联系人数据的中央存储库。 联系人提供程序是您在设备的联系人应用中看到的数据源,您也可以在自己的应用中访问其数据,并可在设备与在线服务...
  • 现在开发中的功能需要直接跳转到拨号、联系人、短信界面等等,查找了很多资料,自己整理了一下。 首先,我们先看拨号界面,代码如下:Intent intent =new Intent(); intent.setAction("android.intent.action....
  • Android批量添加通话记录

    千次阅读 2014-05-20 14:44:50
    在前面有提到批量添加联系人:Android批量添加联系人到通讯录,通话记录和通讯录一样都是直接操作ContentProvider。为了使批量更新、插入、删除数据更加方便,android系统引入了 ContentProviderOperation类,使用...
  • 最近在弄安卓联系人, 网上有很多资料,但是...1. android 里面的 联系人数据库 的存储 模式,对联系人数据库的 字段介绍 2. 几种常用的查询联系人的 方式 直接给代码 android 里面的 联系人数据库 的存储 模式,对
  • 但,我们也许会发现一个问题,我们都知道,我们选择的联系人都是通过Microsoft帐号从云服务器取出来的,那么,如果我有自己的联系人数据呢?比如,保丰在本地数据文件中的,或者从我的Web服务中获取的联系人呢?那...
  • android读取sim卡联系人

    万次阅读 2012-08-20 16:42:55
    SIM的provider是IccProvider。既然是provider,就和操作Contact的provider类似的,只是有一些微小差别。 ...android中对SIM卡操作的支持很简单,具体的查询、插入、更新和删除操作如下面的代码段
  • android操作sim卡联系人信息

    千次阅读 2012-07-18 18:14:28
    SIM的provider是IccProvider。既然是provider,就和操作Contact的provider类似的,只是有一些微小差别。 ...android中对SIM卡操作的支持很简单,具体的查询、插入、更新和删除操作如下面的代码段
  • 本系列文章主要结合Python语言实现知识图谱构建相关工程,具有一定创新性和实用性,非常希望各位博友交流...这篇文章主要介绍最经典的自然语言处理工具之一——Jieba,包括中文分词、添加自定义词典及词性标注等内容。
  • 之前理解的不正确, 即使sim卡上的联系人未导入到本地电话本,也会存储在contacts表里, 只是会用一个contact_type(0,11,12..)来表明是卡上的数据还是本地的数据。   以君正平台-android2.2代码为例,电话本...
  • Android开发之Intent跳转到系统应用中的拨号界面、联系人界面、短信界面 时间:2012年08月02日 10:18:46 来源:千锋网 作者: 现在开发中的功能需要直接跳转到拨号、联系人、短信界面等等,查找了很多资料,...
  • 2、点击“查看已注册的用户” → 跳转到Admin_user_show.jsp界面,即可查看所有用户的信息:包括刚添加的用户信息(但还解决乱码问题) 3、点击“返回添加用户” → 即可回到开始的添加用户信息界面 二、代码...
  • 仿微信添加标签效果

    千次阅读 2016-11-14 16:57:46
    可以说微信做的用户体验太棒了,可以做到老少皆宜,给个赞,我们也同时应该告诫自己,用户体验应该向微信看齐,微信就是我们的标杆,那我们今天也来仿一仿微信添加的标签功能。只能仿着做了,真是做不到微信的那种...
  • 应用系统数据删除与恢复

    千次阅读 2018-05-11 11:48:38
    1. 重要数据假删除的基本实现1.1. 假删除的实现1.2. 删除数据的恢复2. 假删除的权限控制2.1.... 唯一性约束添加删除标记3.5. 唯一性编码特殊处理4. 数据的级联关系4.1. 被删除数据引用了其他数据...
  • 《通讯录》开发用到得知识点 常量、变量的使用 全局变量 分支语句 函数 宏 循环语句 scanf和printf 数据 结构体 ...数组元素如何删除(不使用链表) ...添加联系人界面 删除联系人界面 ...
  • 后来,由于涉及到对象相关的操作,此时如果还使用原生API,缓存中的对象是一坨乱码,让眼花缭乱,这是就需要自定义序列化机制了,而那位同事就默默的添加上了,在团队中没有任何的反馈。 当然,在系统缓存的...
  • Spring+Quartz实现动态添加定时任务

    万次阅读 热门讨论 2018-08-23 14:39:35
    老规矩,吃水不忘挖井:挖井一,挖井二. 以上,感谢。 首先引入jar: &lt;!-- quartz定时任务 --&gt; &lt;dependency&gt; &lt;groupId&gt;org.quartz-scheduler&lt;/groupId&...
  • 【COM编程】如何往IE工具条添加按钮

    千次阅读 2012-04-17 10:06:12
    金山词霸、网络蚂蚁等软件安装后会向IE的工具条添加自己的按钮。按下按钮后还会作出相应的动作,这种功能是如何实现的呢?读完本文,您也可以将自己应用程序的按钮添加到IE的工具条中。 基本原理: 从IE5开始便...
  • 应该有遇到刷了某些ROM GOOGLE账户就不能添加了,电子市场也没法用了,其实原因是谷歌的GMS服务包一些东东被作者给删除掉了,导致点了添加谷歌账户就停止响应!目前本人使用的是Simply_2.5_Honey SP2 精简版的ROM...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 54,165
精华内容 21,666
关键字:

如何删除未添加的联系人