有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Android上使用BroadcastReceiver从Java报警执行本机代码

首先,我是Android和Java新手,所以我的大部分工作都是用本地代码完成的。我这样做主要是为了提高速度,因为我的代码必须处理图像处理

我的应用程序是一个timelapse相机,它必须每隔一段时间醒来一次,获取一个唤醒锁,拍摄一些照片,处理它们,设置一个新的闹钟,然后进入睡眠状态

我的报警接收器代码如下所示:

public class MyBroadcastReceiver extends BroadcastReceiver {
    private static final String TAG = "Something";

    @Override
    public void onReceive(Context context, Intent intent)
    {
        Log.e(TAG, "We got alarm :)");

        new Thread(new Runnable() {
            public void run() {
                CameraActivity.cameraraw.call_alarm();  }
        }).start();
}

摄像活动。摄影师。调用报警();只需调用JNI函数,然后将控件提供给我的c代码,如下所示:

JNIEXPORT jbyte JNICALL Java_com_example_安卓_camera2raw_Camera2RawFragment_rtc_1alarm(JNIEnv* env,jclass clazz,jobject cameraraw)
{
    syslog(LOG_CRIT, "Alarm in native code, picture %s",cur_timelapse_pic);

    wake_me_up(env,clazz,cameraraw);

    sleep(5);

    if(cur_timelapse_pic<timelapse_shots)
    {
        do_focus_stack(env,clazz,cameraraw,cur_timelapse_pic);
        cur_timelapse_pic++;
        set_alarm(env,clazz,cameraraw,timelapse_delay);
    }

    go_to_sleep(env,clazz,cameraraw);
    syslog(LOG_CRIT, "Went to sleep");
}

代码在第一次报警时工作正常,但第二次报警甚至在syslog()之前崩溃

2020-04-30 18:19:00.039 15198-15727/com。实例安卓带roid的camera2raw。camera2ra:0xebadde09跳过次数:0

--------- beginning of crash

2020-04-30 18:19:00.040 15198-15727/com。实例安卓camera2raw A/libc:致命信号11(SIGSEGV),代码1(SEGV_-MAPERR),tid 15727(线程8)中的故障地址0x1,pid 15198(roid.camera2raw) 2020-04-30 18:19:06.5315198-15198/com。实例安卓camera2raw D/ViewRootImpl@1b051d4[CameraActivity]:表面释放。安卓看法ViewRootImpl$ViewRootHandler。handleMessage:4825 安卓。操作系统。处理程序。发信人:106

我有什么遗漏吗?顺便说一句,我的函数在下一个警报到来之前完成了它的工作。 任何帮助都将不胜感激


共 (1) 个答案

  1. # 1 楼答案

    cur_timelapse_pic似乎是一个数字,但您正试图将其记录为字符串(%s)。改为%d%u