手机通讯录,或许可以增加QQ、微信之类IM用户黏度

很多互联网公司,都努力抢占互联网的用户入口,从PC的操作系统Ghost(番茄花园、深度),到PC的浏览器入口(hao123),到PC的桌面程序入口(360安全卫士),再到移动平台的刷机程序(shendu、shuame),这些地方,都陆续成为他们的目标。 在手机上,不管各种刷机程序如何精简软件,都剪不掉通讯录这个程序。如果,在通讯录中,展示当前用户Instant Messenger即时通讯工具中好友的在线状况呢?如果你想给别人打电话,在通讯录里找这个人,找到之后,发下下面有个QQ或者WeChat微信在线的图标,如果事情不紧急的话,你会选择通过QQ语音通话吗?

这得从我去年年底,今年年初买的一部手机说起。
在2012年底,我换了一部Android手机Google Nexus 4,这是我的第一步智能手机,我打算在它上面,做一些移动应用上的尝试。但不知道该做什么样的功能,无意中,看到通讯录中联系人的列表里,如果对方gtalk在线的话,会直接展示出来,而且,还会同步个性签名,这太棒了。
Google Talk在国内,不是很流行,用户基数也少。在国内最流行的,莫过于腾讯的QQ了,以及手机专用的IM --WeChat微信,我也是腾讯的重度老用户。试想着,也把QQ联系人状态显示在通讯录里,一目了然,方便用户,也扩大了腾讯的魔爪。

程序上来说,我初次写android应用,java也已经5、6年没碰过,当初也只是会写个hello world。现在做起来,实在难。还好有google 官方手册,各大开源社区上也有现成的开源项目,照葫芦画瓢,勉强能跑起来。实现IM状态更新到通讯录这比较简单,但获取当前登录QQ、以及登录QQ的联系人在线情况,签名信息这极为困难。腾讯没有提供相应接口。我也不敢逆向手机QQ源码,来获取相应信息,哪怕敢了,也要花费大量精力。哪怕做成了,还是给腾讯做嫁衣。

String imWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
String[] imWhereParams = new String[]{id,ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE};
Cursor imCur = cr.query(ContactsContract.Data.CONTENT_URI,null, imWhere, imWhereParams, null);
if (imCur.moveToFirst()) {
	do{
		String imName = imCur.getString(imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA));
		int imProtocol = imCur.getInt(imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.PROTOCOL));
		int imDATA_ID  = imCur.getInt(imCur.getColumnIndex(ContactsContract.Data._ID));
		String imLabel = imCur.getString(imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.LABEL));
		switch(imProtocol)
		{
			case PROTOCOL_QQ:
				System.out.println(imDATA_ID);
				final ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
				ops.add(ContentProviderOperation.newInsert(ContactsContract.StatusUpdates.CONTENT_URI)
					.withValue(ContactsContract.StatusUpdates.DATA_ID, imDATA_ID)
					// ......
					.build());
					try {
						System.out.println("QQ QQ "+id+"  " + imProtocol+" -- "+imName + "==="+imLabel);
						getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
					} catch (final RemoteException e) {
						Log.e(TAG, "im type", e);
					} catch (final OperationApplicationException e) {
						Log.e(TAG, "im type", e);
					}
					System.out.println("QQ " + imProtocol+" -- "+imName + "==="+imLabel);
				break;
			case PROTOCOL_MSN:
				break;
			case PROTOCOL_GOOGLE_TALK:
				break;
			default:
		}
	}
	while(imCur.moveToNext());
}
imCur.close();

这么一说,我的第一个移动应用,就这么OVER了。

抛开个人因素,单说这个创意,我认为,是令人震惊的…
如果你想给别人打电话,在通讯录里找这个人,找到之后,发下下面有个QQ在线的图标,如果事情不紧急的话,你会选择通过QQ语音通话吗?
QQ在线状态同步到手机通讯录中
android通讯录同步QQ在线状态
(微信没有在线状态一说)

打开对方信息详情页:

android系统手机通讯录同步QQ、微信在线状态

如果你输入了号码, 通话界面,直接提醒你 QQ、WeChat在线,可以通过其免费语音通话,那你选择吗?(紧急事情除外)
android拨打电话界面,插入QQ、微信在线状态
拨打电话界面,同步QQ、微信在线状态

当用户选择使用QQ、微信图标时,即(在电话接通之前)挂断电话,直接弹出对应的语音通话面板,开始通话。(如果电话接通,则隐藏图标选择界面。)
腾讯,你还等什么……

如果这样做了,那得劫持多少用户改用QQ啊? 移动、网通恨死IM了。 其实,移动,联通你们也可以的,但你们舍得么?敢吗?有勇气么?有胆识么?以后你们终究会从一张SIM电话卡沦落为移动的上网卡。

可能有人说,用户很少会在通讯录里填上对方的QQ号码,一般只会存个手机号,其他信息都会再输入了。但那是非智能手机的时候,填写联系人信息不方便的做法。现在可以在电脑上输入,云端同步到手机中。实在不行,腾讯不是有手机管家的通讯录管理功能么?腾讯自己就很容易帮用户关联好了吧?

上面提到,紧急事情可以不选择QQ、微信进行语音通话,但以后大家都喜欢这种通话方式,那么电话卡失去打电话功能,只能留下网络支持的功能了,那么移动电话卡变成移动网卡

PS:就连Photoshop,老衲也用的很流畅,PS的界面也很惊艳,老衲不尽欣赏起自己一番。

  1. #手机通讯录,或许可以增加QQ、微信之类IM用户黏度# – 在2012年底,我换了一部Android手机Google Nexus 4,这是我的第一步智能手机,我打算在… http://t.cn/zYo1Dkk

  2. 非常不错啊。移动互联的整合是核心,而以整合为题的app确实不太多。