JNI 实现 Broadcast

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)

JNI 实现 Broadcast,布布扣,bubuko.com

时间: 2024-08-09 14:48:40

JNI 实现 Broadcast的相关文章

JNI线程模式

作者:左少华 博客:http://blog.csdn.net/shaohuazuo/article/details/43149193 转载请注明出处:http://blog.csdn.net/shaohuazuo 1.Android线程介绍. 1.线程的概念: 这个是百度百科里的一段话. 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元. 一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成. 另外,线程是进程中的一个实体,是被

Android 通过JNI实现守护进程,使得Service服务不被杀死

来自: http://finalshares.com/read-7306 转载请注明出处: http://blog.csdn.net/yyh352091626/article/details/50542554 开发一个需要常住后台的App其实是一件非常头疼的事情,不仅要应对国内各大厂商的ROM,还需要应对各类的安全管家...虽然不断的研究各式各样的方法,但是效果并不好,比如任务管理器把App干掉,服务就起不来了... 网上搜寻一番后,主要的方法有以下几种方法,但都是治标不治本: 1.提高Serv

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"); i

Android 通过JNI实现守护进程

转载请注明出处:http://blog.csdn.net/yyh352091626/article/details/50542554 开发一个需要常住后台的App其实是一件非常头疼的事情,不仅要应对国内各大厂商的ROM,还需要应对各类的安全管家...虽然不断的研究各式各样的方法,但是效果并不好,比如任务管理器把App干掉,服务就起不来了... 网上搜寻一番后,主要的方法有以下几种方法,但都是治标不治本: 1.提高Service的优先级:这个,也只能说在系统内存不足需要回收资源的时候,优先级较高,

android Broadcast 总结

1, 生命周期 在android官方文档中,推荐我们在onResume中进行 registerReceiver, 在onPause中进行unRegisterReceiver. 他们给出的理由是: If registering a receiver in your Activity.onResume() implementation, you should unregister it in Activity.onPause(). (You won't receive intents when pa

Delphi使用android的NDK是通过JNI接口,封装好了,不用自己写本地代码,直接调用

一.Android平台编程方式:      1.基于Android SDK进行开发的第三方应用都必须使用Java语言(Android的SDK基于Java实现)      2.自从ndk r5发布以后,已经允许完全用C/C++ 来开发应用或者游戏,而不再需要编写任何Java 的代码   Android程序运行在Dalvik虚拟机中,NDK允许用户使用类似C / C++之类的原生代码语言执行部分程序. 二.跨平台移动开发   Delphi使用android的NDK是通过JNI接口,封装好了,不用自己

[转]Ubuntu下使用Jni开发例子

http://www.cnblogs.com/zxglive2006/archive/2012/01/15/2323110.html 先用eclipse 创建 Java Project; 然后直接在项目中添加Prompt.java文件,放在default package下(最好不要添加包,否则容易出错). 1. 编写Java文件,在其中声明native方法, 并通过static 语句块加载动态链接库,示例Prompt.java代码如下: class Prompt { private native

通过$broadcast或$emit在子级和父级controller之间进行值传递

1 通过$broadcast或$emit在controller之间进行值传递,不过这些controller必须是子级或者父级关系, 2 $emit只能向父级parent controller传递事件event与数据data,$broadcast只能向子级child controller传递event与data,$on用于接收event与data. 3 <script> 4 var myapp=angular.module('myapp',[]); 5 myapp.controller('Sel

Android中JNI调用时出现accessed stale local reference的问题

之前在做一个native的模块时遇到这样一个问题: 代码运行在android2.3上没有任何问题,可是在4.2上运行时报出了:JNI ERROR (app bug): accessed stale local reference 的错误. 后来在StackOverflow上找到了问题的答案.简单来说就是  4.0以上的android系统GC在垃圾回收时为了减少内存碎片,会对内存进行整理,整理时必然会移动对象的内存地址,这时C代码的指针还指向原来对象的地址,这时该对象已经被移动到了其他位置,因此会