Android JNI回调Java GPS回调 GPS数据上报 mContext发送广播

stephen318tao 2012-03-27 11:37:49
本人在工作中需要模仿GPS通路为android系统添加一个硬件模块(基于串口),目前已经是想从应用程序调用底层的JNI接口等,从而实现往串口发送数据。但是目前我想提供一条从Hardware层到JNI再到frameworks层的通路,并在frameworks层发送广播消息,使应用程序能够收到这个广播消息并作出相应处理,现在从hardware层到frameworks层已经打通,但是在frameworks发送广播消息时报错(空指针异常),详细如下:
系统GPS源码:
JNI:

static void location_callback(GpsLocation* location)
{
JNIEnv* env = AndroidRuntime::getJNIEnv();
env->CallVoidMethod(mCallbacksObj, method_reportLocation, location->flags,
(jdouble)location->latitude, (jdouble)location->longitude,
(jdouble)location->altitude,
(jfloat)location->speed, (jfloat)location->bearing,
(jfloat)location->accuracy, (jlong)location->timestamp);
checkAndClearExceptionFromCallback(env, __FUNCTION__);
}

frameworks:

private void reportLocation(int flags, double latitude, double longitude, double altitude,
float speed, float bearing, float accuracy, long timestamp) {
if (VERBOSE) Log.v(TAG, "reportLocation lat: " + latitude + " long: " + longitude +
" timestamp: " + timestamp);
...
...
...
Intent intent = new Intent(LocationManager.GPS_FIX_CHANGE_ACTION);
intent.putExtra(LocationManager.EXTRA_GPS_ENABLED, true);
mContext.sendBroadcast(intent);
updateStatus(LocationProvider.AVAILABLE, mSvCount);

这个mContext是在构造函数中实现的

public GpsLocationProvider(Context context, ILocationManager locationManager) {
mContext = context;


我的代码:

BtNative(Context context) {

Log.i(TAG, "--------Constuct BtNative OK----------");
mContext = context;

if(mContext == null)

{
Log.i(TAG, "---mContext == NULL---");
}
else
{
Log.i(TAG, "---mContext != NULL---");
}



private void reportPhone(String str) {

Log.i(TAG, "-callbacks---");

Log.i(TAG, "---" + str + "----");

Intent intent = new Intent(ACTION_BT_INCALL);



Log.i(TAG, "---Intent new ok!---");



if (mContext == null) {

Log.i(TAG, "---mContext == NULL---");

} else {

mContext.sendBroadcast(intent);

}

}


当串口有相应的数据过来时会调用到reportPhone,但是mContext总是为null,我不知道这是为什么,感觉有点棘手
故发此贴,请求牛哥给予帮助


...全文
893 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
pt621 2013-07-16
  • 打赏
  • 举报
回复
楼主留个QQ好吗?
Vieboo韦伯 2012-11-14
  • 打赏
  • 举报
回复
引用 10 楼 stephen318tao 的回复:
自己找到答案了 嘻嘻
楼主能不能说说思路,我也遇到和你相同的问题了,帮忙指导一下,谢谢了!~
Sundy_李 2012-08-13
  • 打赏
  • 举报
回复
楼主能说下解决方案吗,我现在在做视频通话的东西遇到同样的问题,麻烦能给说一下吗?

QQ:1454561492
Email:lzhy5257@163.com

谢谢了。。。
stephen318tao 2012-05-06
  • 打赏
  • 举报
回复
自己找到答案了 嘻嘻
stephen318tao 2012-04-01
  • 打赏
  • 举报
回复
6楼 你说的socket是怎么实现的 能说详细些吗
stephen318tao 2012-03-31
  • 打赏
  • 举报
回复
我在那个构造函数中已经有打印信息啊 构造里面非null 但是一到JNI的反调函数中就为null
leer168 2012-03-29
  • 打赏
  • 举报
回复
mContext是如何来的?谁提供的啊
你的调用关系没仔细看,头大
stephen318tao 2012-03-29
  • 打赏
  • 举报
回复
自己顶自己呀
z642010820 2012-03-29
  • 打赏
  • 举报
回复
在构造函数里加点打印看看传进来的context是不是空,这种问题就靠看代码加打印定位了
xqhrs232 2012-03-29
  • 打赏
  • 举报
回复
我的是直接用Linux下的socket来做串口通信的,我没走Android framework层去把串口写成一个系统service.关注!!!总觉得自己玩的是linux而不是android.
xqhrs232 2012-03-29
  • 打赏
  • 举报
回复
学习新技术啊!
stephen318tao 2012-03-29
  • 打赏
  • 举报
回复

private final Context mContext;
private final ILocationManager mLocationManager;
private Location mLocation = new Location(LocationManager.GPS_PROVIDER);

mContext好像只能静态定义,然后就是在构造函数里面去赋值

这些都是源码里面的东西 不可能全部都贴出来,如果可以看看GPS框架源码帮我分析分析

80,493

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧