2013-07-18 25 views
6

Tôi hiện đang xây dựng ứng dụng Android trực tuyến và tôi đang cố gắng tích hợp ứng dụng khách điều khiển từ xa (ví dụ: điều khiển từ màn hình khóa trên ICS +).Nhấp nháy trên màn hình khóa của máy khách điều khiển từ xa khi dừng ứng dụng từ chính máy khách

Để làm như vậy, tôi làm điều đó lúc khởi động trong dịch vụ trực tuyến của tôi:

int result = audioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN); 

    if (result != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { 
     stopSelf(); 
    } 

    mediaButtonReceiverComponent = new ComponentName(this, RemoteControlReceiver.class); 
    audioManager.registerMediaButtonEventReceiver(mediaButtonReceiverComponent); 

    if (remoteControlClientCompat == null) { 
     final Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON); 
     mediaButtonIntent.setComponent(mediaButtonReceiverComponent); 
     remoteControlClientCompat = new RemoteControlClientCompat(
       PendingIntent.getBroadcast(
         getApplicationContext(), 
         0, 
         mediaButtonIntent, 
         PendingIntent.FLAG_UPDATE_CURRENT 
       ) 
     ); 
     RemoteControlHelper.registerRemoteControlClient(audioManager, remoteControlClientCompat); 
    } 

    final int flags = RemoteControlClient.FLAG_KEY_MEDIA_STOP; 
    remoteControlClientCompat.setTransportControlFlags(flags); 

remoteControlClientCompat chỉ đơn giản là một thể hiện của RemoteControlClientCompat từ mẫu.

sau đó trong quá trình phát trực tuyến, tôi đang cập nhật siêu dữ liệu. mọi thứ đều hoạt động bình thường, ngay cả các điều khiển được gửi đến số RemoteControlReceiver của tôi. Dữ liệu và hình ảnh xuất hiện độc đáo trên màn hình khóa.

Dừng phát trực tiếp từ ứng dụng của tôi phá hủy màn hình khóa nhưng khi tôi đang cố gắng hủy nó khỏi chính tiện ích (bằng cách nhấn nút dừng), nó đang làm điều gì đó kỳ lạ. Nhấn nút dừng làm cho máy thu phát ngừng dịch vụ truyền trực tuyến của tôi. Sau đó, trong phương thức onDestroy() của dịch vụ, tôi đang làm điều đó:

RemoteControlHelper.unregisterRemoteControlClient(audioManager, remoteControlClientCompat); 
    audioManager.unregisterMediaButtonEventReceiver(mediaButtonReceiverComponent); 
    audioManager.abandonAudioFocus(this); 

Tiện ích sẽ nhấp nháy ngay sau khi audioManager.unregisterMediaButtonEventReceiver(mediaButtonReceiverComponent); được gọi. Tôi đã thử nhận xét dòng và nhấp nháy xảy ra với audioManager.abandonAudioFocus(this);. Nhận xét rằng dòng khác làm cho nó nhấp nháy khi dịch vụ dừng lại.

Tôi đã nhận thấy điều này cũng xảy ra khi tôi ngừng phát trực tiếp từ thông báo của mình.

Tôi đang làm gì sai? Tôi đã thử thay đổi thứ tự của các cuộc gọi này nhưng tôi không thể giải quyết nó. Tôi đã nhận thấy Spotify có cùng một vấn đề giống với một vài phiên bản trước đây. Tôi tự hỏi cách họ giải quyết nó ...

Trả lời

4

Ok tôi đã sửa nó. Nó đơn giản chỉ vì RemoteControlClient không thể phát khi chúng ta bỏ tập trung âm thanh. Vì vậy, tôi chỉ phải gọi điều đó trước khi phá hủy bất cứ điều gì:

remoteControlClientCompat.setPlaybackState(RemoteControlClient.PLAYSTATE_PAUSED); 
Các vấn đề liên quan