Выполнение собственного кода из тревоги Java с помощью BroadcastReceiver, на Android - PullRequest
0 голосов
/ 30 апреля 2020

Во-первых, я новичок в Android и Java, поэтому я делаю большую часть своих вещей в нативном коде. Я делаю это в основном по соображениям скорости, так как мой код имеет дело с обработкой изображений.

Мое приложение - это камера с интервальной съемкой, где она должна периодически просыпаться, приобретать пробуждение, делать снимки, обработайте их, установите новый сигнал тревоги, затем go переведите в спящий режим.

Код моего приемника сигналов тревоги выглядит следующим образом:

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();
}

CameraActivity.cameraraw.call_alarm (); просто вызывает функцию JNI, а затем передает управление моему c коду, который выглядит следующим образом:

JNIEXPORT jbyte JNICALL Java_com_example_android_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");
}

Код отлично работает при первом аварийном сигнале, но второй аварийный сигнал дает сбой даже до системного журнала ( )

2020-04-30 18: 19: 00.039 15198-15727 / com.example. android .camera2raw W / roid.camera2ra: 0xebadde09 пропущено раз: 0

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

2020-04-30 18: 19: 00.040 15198-15727 / com.example. android .camera2raw A / lib c: фатальный сигнал 11 (SIGSEGV), код 1 (SEGV_MAPERR), адрес ошибки 0x1 в tid 15727 ( Thread-8), pid 15198 (roid.camera2raw) 2020-04-30 18: 19: 06.531 15198-15198 / com.example. android .camera2raw D / ViewRootImpl@1b051d4 [CameraActivity]: высвобождение поверхности. android .view.ViewRootImpl $ ViewRootHandler.handleMessage: 4825 android .os.Handler.dispatchMessage: 106

Что-то мне не хватает? Кстати, моя функция заканчивает свою работу задолго до следующего сигнала тревоги. Любая помощь будет высоко ценится!

1 Ответ

1 голос
/ 30 апреля 2020

cur_timelapse_pic представляется числом, но вы пытаетесь записать его в виде строки (%s). Вместо этого измените значение на %d или %u.

...