首页 > 代码库 > sendBroadcast的JNI实现

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)