1
슈퍼 파워 "Simple USB Example"는 C++ 방식을 기반으로 Java 측에서 UI를 업데이트하기 위해 아래 코드를 사용합니다. 이것은 처음으로 JNI
을 보았습니다 혼자 다음에 방법이 있습니다. 비슷한 상황에서 JNIEXPORT
을 보았습니다 만, 단지 JNI
이 아닙니다.이 사용법에 대해 더 자세히 알고 싶지만 Google에 어떤 행운을 가져다주지는 않았습니다.Superpowered Android JNI : 이해 "JNI (jintArray ..."형식
C++ Code :
// This is called by the MainActivity Java object periodically.
JNI(jintArray, getLatestMidiMessage, PID)(JNIEnv *env, jobject __unused obj) {
jintArray ints = env->NewIntArray(4);
jint *i = env->GetIntArrayElements(ints, NULL);
pthread_mutex_lock(&mutex);
i[0] = latestMidiCommand;
i[1] = latestMidiChannel;
i[2] = latestMidiNumber;
i[3] = latestMidiValue;
pthread_mutex_unlock(&mutex);
env->ReleaseIntArrayElements(ints, i, NULL);
return ints;
}
Java code : 이 예제의 코드에서
// Update UI every 40 ms.
Runnable runnable = new Runnable() {
@Override
public void run() {
int[] midi = getLatestMidiMessage();
switch (midi[0]) {
case 8: textView.setText(String.format(Locale.ENGLISH, "Note Off, CH %d, %d, %d", midi[1] + 1, midi[2], midi[3])); break;
case 9: textView.setText(String.format(Locale.ENGLISH, "Note On, CH %d, %d, %d", midi[1] + 1, midi[2], midi[3])); break;
case 11: textView.setText(String.format(Locale.ENGLISH, "Control Change, CH %d, %d, %d", midi[1] + 1, midi[2], midi[3])); break;
}
handler.postDelayed(this, 40);
}
};
handler = new Handler();
handler.postDelayed(runnable, 40);
}
정말 JNIEXPORT 변장입니다! 감사! – user1147171