JNI编程(别望了哦,留作备注)

本文介绍了一种使用JNI(Java Native Interface)通过Android平台发送短信的方法。具体包括两个主要功能:通过二进制数据发送短信(sentDataSms)和通过文本消息发送短信(sentTextSms)。文章详细展示了如何调用Android的SmsManager类来实现短信发送,并提供了完整的C/C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明

1.数据类型
java数据类型在JNI调用的类型
2.由于命令生成C文件较麻烦,直接在eclipse里面根据规则自己写C文件。直接上代码
2.1 头文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class io_github_yanbober_ndkapplication_NdkJniUtils */

#ifndef _Included_com_xm_spsgsdkcore_jni_MsJni
#define _Included_com_xm_spsgsdkcore_jni_MsJni
#ifdef __cplusplus
extern "C" {
#endif

JNIEXPORT void JNICALL Java_com_xm_spsgsdkcore_jni_MsJni_sentDataSms
  (JNIEnv * , jclass , jstring, jstring, jshort, jbyteArray,jobject,jobject);

JNIEXPORT void JNICALL Java_com_xm_spsgsdkcore_jni_MsJni_sentTextSms
  (JNIEnv * , jclass , jstring, jstring, jstring, jobject,jobject);

#ifdef __cplusplus
}
#endif
#endif

CPP文件具体的实现


#include "msfason.h"
#include <string.h>
//com.xm.spsgsdkcore.util.sms
JNIEXPORT void JNICALL Java_com_xm_spsgsdkcore_jni_MsJni_sentDataSms
  (JNIEnv * env, jclass smsUtil, jstring phoneNumber , jstring scAddress, jshort destinationPort,
          jbyteArray data,jobject sentPI,jobject deliverPI){

    //定义SmsManager class
    jclass sms_class = env->FindClass("android/telephony/SmsManager");

    //jmethodID setName_method = env->GetMethodID(sms_class, "setName", "(Ljava/lang/String;)V");
    //获取 SmsManager sms = SmsManager.getDefault();
    jmethodID getDefault_methodID = env->GetStaticMethodID(sms_class, "getDefault", "()Landroid/telephony/SmsManager;");
    //获取SMS实例对象
    jobject sms_obj = env->CallStaticObjectMethod(sms_class,getDefault_methodID);
    //sms.sendDataMessage(phoneNumber, null, destinationPort, data, sentPI, deliverPI);
    jmethodID sendDataMessage_methodID=env->GetMethodID(sms_class, "sendDataMessage","(Ljava/lang/String;Ljava/lang/String;S[BLandroid/app/PendingIntent;Landroid/app/PendingIntent;)V");
    env->CallVoidMethod(sms_obj, sendDataMessage_methodID,phoneNumber,scAddress,destinationPort,data,sentPI,deliverPI);
}
////com.xm.spsgsdkcore.util.sms
JNIEXPORT void JNICALL Java_com_xm_spsgsdkcore_jni_MsJni_sentTextSms
  (JNIEnv * env, jclass smsUtil, jstring phoneNumber, jstring scAddress,
          jstring payMessage, jobject sentPI,jobject deliverPI){
    //定义SmsManager class
    jclass sms_class = env->FindClass("android/telephony/SmsManager");

    //jmethodID setName_method = env->GetMethodID(sms_class, "setName", "(Ljava/lang/String;)V");
    //获取 SmsManager sms = SmsManager.getDefault();
    jmethodID getDefault_methodID = env->GetStaticMethodID(sms_class, "getDefault", "()Landroid/telephony/SmsManager;");
    //获取SMS实例对象
    jobject sms_obj = env->CallStaticObjectMethod(sms_class,getDefault_methodID);
    //获取方法IDsendTextMessage sms.sendTextMessage(phoneNumber, null,payMessage, sentPI, deliverPI);
    jmethodID sendTextMessage_methodID=env->GetMethodID(sms_class, "sendTextMessage",
            "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/app/PendingIntent;Landroid/app/PendingIntent;)V");
    env->CallVoidMethod(sms_obj, sendTextMessage_methodID,phoneNumber,scAddress,payMessage,sentPI,deliverPI);

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值