微信可以把联系人直接添加到桌面,为何点击该联系人图标后就会直接进到聊天界面?

如图:

1、打开微信,在联系人界面点击目标联系人:
图片描述

2、点击联系人详细资料界面的右上角:
图片描述

3、选择菜单最下方“添加到桌面”:
图片描述

4、联系人就添加到桌面上了:
图片描述

5、点击桌面上的联系人图标,就能直接进入聊天界面:
图片描述

**我的问题如下:
问题1:为什么点击这个图标就能直接进入微信聊天界面?(我知道这是个ShortCut ,我更想知道的是这个ShortCut 的Intent传递了何种数据,使得能够直接打开了与微信上指定联系人的对话窗口)
问题2:如何写一段代码,来启动这个“联系人图标”?**

阅读 13.2k
4 个回答

通过广播创建这个快捷图标的,它的官方名称叫:Short Cut。

完成添加图标需要以下几个步骤:

  1. 添加权限 <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />

  2. 执行以下代码

    // 添加桌面图标的 intent
    Intent intent = new Intent();
    intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
    // 指定桌面图标 label
    intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "example");
    // 指定图标
    intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher));
    // 指定桌面图标打开后动作的 intent
    Intent value = new Intent();
    value.setAction("android.intent.action.home");
    value.addCategory("android.intent.category.DEFAULT");
    intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, value);
    // 发送广播
    sendBroadcast(intent);
    

其中通过设置 Intent.EXTRA_SHORTCUT_INTENT 的值为一个 Intent,接下来的事情和使用 intent 跳转某个界面是一样的了,所以可以直接进入聊天界面。

需要跳转到对应的会话,则需要通过查询联系人的 ContentProvider 来获取联系人的 ID,然后通过Intent 跳转:

public final static String WEIXIN_CHATTING_MIMETYPE = "vnd.android.cursor.item/vnd.com.tencent.mm.chatting.profile";//微信聊天

public static void shareToFriend(Context context,String id) {
    Intent intent = new Intent(Intent.ACTION_VIEW);  
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.setDataAndType(Uri.withAppendedPath(  
    ContactsContract.Data.CONTENT_URI, id),  
    WEIXIN_CHATTING_MIMETYPE);  
    context.startActivity(intent); 
}

相同的方式一样可以进入联系人的朋友圈、进行视频聊天等动作。因为联系人的 contactId 是必要参数,所以一般是在通讯录相关的 App 上才会用到(我也是前司曾开发一个通讯录 App 了解到的)

不要想了,微信的快捷方式都是有token验证的,你建立的打不开

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题