OpenCV 용 사용자 정의 처리 스레드 인 안드로이드 토스트를 만들어야하므로 여기에 제안 된대로 runOnUiThread()를 사용할 수 없습니다. Android: Toast in a thread.다른 스레드에서 토스트 만드는 법 (sans runOnUiThread)
이 코드의 대부분은 CVCamera 샘플 앱에서 가져온 것입니다. 나는 서핑 메뉴 버튼을 선택하면하지만 그 낯선이의 SURFProcessor은과 같이 호출됩니다
나는 휴대 전화의 카메라 버튼을 누를 때 (= 사실 capturePress), 이미지가 촬영되도록이 프로세서 쓰레드가 실행 else if (item.getTitle().equals("SURF")) {
defaultcallbackstack.addFirst(new SURFProcessor());
toasts(DIALOG_TUTORIAL_SURF, "");
}
처리가 완료되었습니다. 같이 나는 토스트 메소드를 호출 할 :
void toasts(int id, String msg) {
switch (id) {
case PROCESS_MESSAGE:
Toast.makeText(MMRapp.this, msg, Toast.LENGTH_LONG).show();
break;
.........
오른쪽
지금이 코드는 나에게 오류를 제공합니다 :
여기class SURFProcessor implements NativeProcessor.PoolCallback {
@Override
public void process(int idx, image_pool pool, long timestamp,
NativeProcessor nativeProcessor) {
if(capturePress) {
String processMsg = processor.processFeatures(idx, pool, cvcamera.DETECT_SURF);
capturePress = false;
toasts(PROCESS_MESSAGE, processMsg);
}
}
}
는 메인 클래스에있는 토스트 방법, 확장 활동이다 "할 수 없습니다 Looper.prepare()를 호출하지 않은 스레드 내부에서 핸들러를 생성하십시오. " 토스트 방법을 호출하는 방법에 대해 어떻게 생각합니까? 또는 토스트 메서드에서 processMsg의 변경 내용을 수신 할 수 있습니까? 가능한 경우 processMsg를 보내거나 클래스 변수를 변경하여 처리 할 수 있습니다. 본질적으로,이 프로세서 스레드에서 업데이트 된 String이 필요합니다.
대단히 감사합니다. 원하는 경우 추가 정보/코드를 제공해 드리겠습니다.
이toastHandler.post(toastRunnable);
핸들러가를 실행 스레드의 사용에서 그것을 호출 한 후
// these are members in the Activity class
Handler toastHandler = new Handler();
Runnable toastRunnable = new Runnable() {public void run() {Toast.makeText(Activity.this,...).show();}}
:
톰
는 감사가
트리거 정의! 매력처럼 작동합니다 ... 나는 그것을 할 수있는 간단한 방법이 있어야한다고 생각했습니다. – wrapperapps