2013-07-08 54 views
6

Tôi đang phát triển một ứng dụng sử dụng một tts bên thứ ba, được đặt tên flite. Tôi đang làm một cái gì đó giống như các tts nói một câu. Tôi muốn nhấn mạnh từng từ khi nó được nói. Đối với điều này, tôi đã quản lý để có được các cuộc gọi lại từ cấp từ các tts. quy trình làm việc giống như thế này - nút "nói văn bản" được nhấn. Nó bắt đầu dịch vụ tt và sau đó gửi văn bản tới các tts nhỏ gọn bằng ngôn ngữ C và được kết hợp với ứng dụng. Bây giờ, từ mã C, sau mỗi từ tôi thực hiện hai cuộc gọi lại đến hai hoạt động java khác nhau: một đến dịch vụ tts để nói từ giây để hoạt động thử nghiệm java của tôi làm nổi bật từ đó. Tôi thành công khi nhận được các cuộc gọi lại từ cấp trong hoạt động thử nghiệm của mình nhưng sau đó tôi không thể thực hiện bất kỳ công việc giao diện người dùng nào.android runonuithread() chức năng không thực hiện

Sau đây là mã mà tôi thực thi khi tôi nhận được cuộc gọi lại: đây là chức năng được gọi từ mã C.

private void WordCallback(int isword) {// from 
    // callback 
    if (isword == -1) { 
     Log.d(LOG_TAG, "its not a word"); 
    } else if (isword == -2) { 
     Log.d(LOG_TAG, "yeah..its the end"); 
    } else { 
     Log.d(LOG_TAG, "its word no " + isword); 

     int word = isword; 
     Log.d(LOG_TAG, "highlightwords"); 
     highlightwords(isword); 

     if (isword == 4) { 
      Log.d(LOG_TAG, "in if"); 

      new Thread(new Runnable() { 
       @Override 
       public void run() { 
        Log.d(LOG_TAG, "thread started"); 
        try { 
         Flitetest.this.runOnUiThread(new Runnable() { 
          @Override 
          public void run() { 
           Log.d(LOG_TAG, "run on ui"); 
           textview.setText("#" + isword); 
          } 
         }); 
         Thread.sleep(300); 
        } catch (InterruptedException e) { 
         e.printStackTrace(); 
        } 
       } 
      }).start(); 
     } 
    }  
} 

FliteTest là tên của hoạt động. Bản ghi nhật ký cho đến khi "Chủ đề bắt đầu" nhưng mã bên trong runonuithread() không bao giờ được thi hành và cũng không có lỗi.

Ngoài ra, Nếu viết textview.settext("something") mà không sợi và runonuithread(), nó mang lại cho các lỗi:

fatal signal 11(sigsegv) at 0x6fc64e87(code=1), thread 20292(SynthThread).

Lý do cho hành vi đó là gì?

Trả lời

0

Trên Android ICS (4.0+), nếu bạn có android:anyDensity=false trong bạn AndroidManifest.xml, bạn đã buộc kết xuất GPU được kích hoạt trên điện thoại ICS của bạn. Đây cũng là một vấn đề đối với các ứng dụng Android gốc. Tùy chọn của bạn là không sử dụng tùy chọn android:anyDensity=false hoặc để tắt hiển thị GPU bắt buộc trên điện thoại. Vì bạn không thể thực sự kiểm soát được thứ hai trên điện thoại của người khác, cái cũ dường như là giải pháp tốt nhất. Hãy nhớ sử dụng hậu tố 'dp' trên tất cả dimensions của bạn sau đó.

+0

ok bạn có thể giải thích cách điều này sẽ giải quyết được vấn đề của tôi không? –

Các vấn đề liên quan