7

Tôi đang tạo hình nền động cho Android 2.3.3 và nó đã sử dụng lớp Visualizer. Tôi đã có một phiên bản làm việc của chương trình Visualizer của tôi làm việc như một đứng một mình nhưng khi tôi đặt mã vào một dịch vụ Live Wallpaper, vấn đề của tôi bắt đầu. Mã sau đây là nơi xảy ra lỗi:android.media.audiofx.Visualizer ném ngoại lệ mỗi lần khác

// Called in my Engine extension's constructor 
public void setupVisualizer() 
{ 
    mBytes = null; 
    mVisualizer = new Visualizer(0); 

    // EDIT 
    mVisualizer.setEnabled(false); // This fixes the issue 
    // END EDIT 

    mVisualizer.setCaptureSize(
     Visualizer.getCaptureSizeRange()[1]); // IllegalStateException Thrown 

    mVisualizer.setDataCaptureListener() { 
     public void onWaveFormDataCapture(Visualizer visualizer, 
      byte[] bytes, int samplingRate) { 
       updateVisualizer(bytes); 
      } 
     public void onFftDataCapture(Visualizer visualizer, 
      bytes[] bytes, int samplingRate) {} 
     }, Visualizer.getMaxCaptureRate()/2, true, false); 

    mVisualizer.setEnabled(true); 
} 

Đây là phần lạ, khi tôi xem qua danh sách hình nền động, tôi sẽ nhấn vào nó để xem trước và hoạt động tốt. Nếu không thiết lập nó làm hình nền hoạt động, tôi nhấn nút quay lại và sau đó chọn nó một lần nữa và nó bị treo. Tôi có thể lặp lại quá trình này và nó chỉ bị treo mỗi lần khác và hoạt động vào những lúc khác. Nếu tôi chọn đặt làm hình nền hoạt động, nó sẽ đổ vỡ mọi lúc.

Trả lời

21

Nhìn at the source, có vẻ như IllegalStateException bị ném nếu trạng thái không phải là STATE_INITIALIZED.

Vì hàm tạo đặt trạng thái là STATE_ENABLED hoặc STATE_INITIALIZED, điều đó có nghĩa là trạng thái khi bạn nhận ngoại lệ là STATE_ENABLED (tùy chọn duy nhất).

Trong tài liệu của setCaptureSize() họ đề cập rằng bạn không nên gọi phương thức này trong khi nhà nước là STATE_ENABLED, vì vậy tôi nghĩ rằng bạn cần phải gọi setEnabled(false) trên đối tượng Visualizer trước khi gọi setCaptureSize()

+0

Đó làm việc! Cảm ơn bạn rất nhiều. Nó nói rằng tôi không thể giải thưởng tiền thưởng cho một 6 giờ nhưng tôi sẽ một lần tôi có thể. – Foggzie

+1

Tôi rất vui khi được nghe. Tôi chưa bao giờ làm việc với Visualizer trước đây, và tôi hy vọng phương pháp tìm kiếm vấn đề của tôi sẽ phục vụ bạn trong những thời điểm cần thiết khác. – MByD

+0

Điều này đã giúp tôi khắc phục lỗi tương tự mà tôi gặp phải với hướng màn hình! Cảm ơn rất nhiều. – kabuto178