cocos 获取通讯录联系人并发送短信

项目推广的时候,运营希望游戏里面越多可以散发的地方越好,于是有了直接在游戏里面发短信邀请通讯录好友打游戏的需求,下面记录一下。

在cocos项目里面做这种手机系统的功能,思路就是跨平台分别调用各自系统的接口来实现获取通讯录和发送短信。cocos工程里面的跨平台写法大致跟我之前写的复制功能差不多,但是具体实现的时候,获取通讯录和发短信稍微麻烦一点,需要获取权限,有操作回调,有界面的一些处理,所以需要根据不同项目做不同的处理。

跟复制功能一样,为了方便,我直接写在了Application里面。win平台的接口实现跟复制功能差不多,就不说了,主要说一下ios和安卓。

在ApplicationProtocol里面添加接口

 //发短信,这里的参数name实际在安卓和苹果的发短信函数里面暂时都用不到,是之前设计接口的时候多写了的,就当做预留参数了,亲们写的时候没有特别的需求不用传name字段。
    virtual bool sendMsgFromContactPicker(const std::string &name, const std::string &phoneNum, const std::string &msgContent)= 0;
//获取通讯录
    virtual  std::string getContactPicker()

获取通讯录的接口的返回值设计成字符串类型是因为,在获取到系统的通讯录之后,我把所有数据存成了json返回给c++处理界面,这样操作就不管ios和安卓系统本身拿到的数据是神马类型,都方便和win下c++传递数据。

安卓在jni文件夹下Java_org_cocos2dx_lib_Cocos2dxHelper文件里实现jni的接口:

//获取通讯录
extern std::string getContactPickerJNI() {

    JniMethodInfo t;
    std::string ret("");

    if (JniHelper::getStaticMethodInfo(t, CLASS_NAME, "getContactPicker", "()Ljava/lang/String;")) {
        jstring str = (jstring)t.env->CallStaticObjectMethod(t.classID, t.methodID);
        t.env->DeleteLocalRef(t.classID);
        ret = JniHelper::jstring2string(str);
        t.env->DeleteLocalRef(str);
    }

    return ret;
}
//发送短信
extern bool sendMsgFromContactPickerJNI(const char* name, const char* phoneNum, const char* msgContent) {
    JniMethodInfo t;

    bool ret = false;
    if (JniHelper::getStaticMethodInfo(t, CLASS_NAME, "sendMsgFromContactPicker", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z")) {
        jstring stringName = t.env->NewStringUTF(name);
        jstring stringPhoneNum = t.env->NewStringUTF(phoneNum);
        jstring stringMsgContent = t.env->NewStringUTF(msgContent);
        ret = t.env->CallStaticBooleanMethod(t.classID, t.methodID, stringName, stringPhoneNum, stringMsgContent);

        t.env->DeleteLocalRef(t.classID);
        t.env->DeleteLocalRef(stringName);
        t.env->DeleteLocalRef(stringPhoneNum);
        t.env->DeleteLocalRef(stringMsgContent);
    }

    return ret;
}

在CCApplication-android里写调用jni的接口:

std::string Applicati
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值