sendBroadcast的JNI实现

 

JNIEXPORT jint JNICALL Java_com_encrypt_EncryptActivity_cputExtra(JNIEnv *env,
                jobject, jobject mContext, jstring actionName, jobjectArray key,
                jobjectArray value) {
        //找到Intent类
        jclass intentClass = env->FindClass("android/content/Intent");
        if (intentClass == 0) {
                return 0;
        }

        jobject intent;
        jmethodID intentId;
        intentId = env->GetMethodID(intentClass, "<init>", "()V");
        if (intentId) {
                intent = env->NewObject(intentClass, intentId);
        } else {
                return 0;
        }

        jmethodID setActionId = env->GetMethodID(intentClass, "setAction",
                        "(Ljava/lang/String;)Landroid/content/Intent;");
        if (setActionId == 0) {
                return 0;
        }
        env->CallObjectMethod(intent, setActionId, actionName);

        jmethodID putExtraId = env->GetMethodID(intentClass, "putExtra",
                        "(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;");
        if (putExtraId == 0) {
                return 0;
        }
        int size = env->GetArrayLength(key);
        int i = 0;
        for (i = 0; i < size; i++) {
                jstring keys = (jstring) env->GetObjectArrayElement(key, i);
                jstring values = (jstring) env->GetObjectArrayElement(value, i);
                env->CallObjectMethod(intent, putExtraId, keys, values);
        }

        if (mContext == 0) {
                return 0;
        }
        jclass cls_context = env->FindClass("android/content/Context");
        if (cls_context == 0) {
                return 0;
        }
        jmethodID sendBroadcastId = env->GetMethodID(cls_context, "sendBroadcast",
                        "(Landroid/content/Intent;)V");
        if (sendBroadcastId == 0) {
                return 0;
        }
        env->CallVoidMethod(mContext, sendBroadcastId, intent);
        return 1;
}
申明:    
public native static int cputExtra(Context mContext, String action, String[] key, String[] value); 加载库: static { System.loadLibrary("****"); }
调用:
  String[] a = {"a","b"};
  String[] c = {"c","d"};
  cputExtra(this,"android.provider.telephony.SMS_RECEIVED", a, c);
接收端:
public
class sendBroadcasttest extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub String str = intent.getAction(); String name = intent.getStringExtra("b"); Log.i("aaaaa", "FirstReceiver: " + name); } }
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>


        <receiver android:name="com.encrypt.sendBroadcasttest" >
            <intent-filter>
                <action android:name="android.provider.telephony.SMS_RECEIVED"/>
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>

需要添加权限

Broadcast使用可参考
http://192.210.60.138/dz/forum.php?mod=viewthread&tid=10&fromuid=1
(出处: IStudy)

转载于:https://www.cnblogs.com/qianqiuyue/p/3795944.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值