Tôi có ứng dụng Android đơn giản nhưng có thể bị cấu trúc kém. Nó bao gồm hai lớp java: MainActivity mở rộng Activity và RemoteControlReceiver mở rộng BroadcastReceiver.BroadcastReceiver cho mục đích ACTION_MEDIA_BUTTON kích hoạt TWICE trên mỗi MediaButton nhấp
Tôi đã theo các hướng dẫn trong hai liên kết sau để thiết lập người nhận Mediabutton: http://android-developers.blogspot.com/2010/06/allowing-applications-to-play-nicer.html http://developer.android.com/training/managing-audio/volume-playback.html
Vấn đề là bất cứ khi nào tôi bấm một nút phương tiện truyền thông (chơi/tạm dừng, tiếp theo, trước đó) trên của tôi bluetooth từ xa, phương thức onReceive() của BroadcastReceiver chạy hai lần. Hoặc cụ thể hơn toàn bộ RemoteControlReceiver được khởi tạo vào đối tượng, phương thức onReceive() của đối tượng sẽ chạy, đối tượng sẽ bị loại bỏ và lặp lại.
Tôi đã thử nghiệm điều này bằng cách đặt một static int mult = 0; trong MainActivity. Tôi tăng bội số 1 lên mỗi lần chạy onReceive. Và nó tăng gấp hai lần cho mỗi lần nhấp nút.
Tôi không chắc chắn điều gì khiến nó chạy hai lần. Phần cứng có gửi tín hiệu kép cho mỗi nhấp chuột hay hệ điều hành gửi nhiều ý định nút đa phương tiện cho mỗi tín hiệu hoặc bộ phát quảng cáo của tôi chạy hai lần cho mỗi mục đích không?
đang MediaButtonReceiver của tôi:
public class RemoteControlReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(Intent.ACTION_MEDIA_BUTTON.equals(intent.getAction())){
KeyEvent Xevent = (KeyEvent) intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
int keyType = Xevent.getKeyCode();
Intent i = new Intent();
i.setAction("com.MainActivity.Shakey.MEDIA_BUTTON");
i.putExtra("keyType", keyType);
context.sendBroadcast(i);
Toast.makeText(context, String.valueOf(MainActivity.mult), Toast.LENGTH_SHORT).show();
MainActivity.mult++;
abortBroadcast();
}
}
}
lọc của máy thu này được đăng ký trong Manifest như sau:
<application> ... <receiver android:name=".RemoteControlReceiver"> <intent-filter> <action android:name="android.intent.action.MEDIA_BUTTON"/> </intent-filter> </receiver> ... </application>
Các Broadcastreceiver là tự động đăng ký các đối tượng AudioManager trong onResume của MainActivity() . Và nó chưa được đăng ký trong onPause(). Như các liên kết cho biết đây là một cách chắc chắn để có được ưu tiên hàng đầu trên ý định media_button. Tôi biết tôi có thể bỏ qua mọi cuộc gọi của BroadcastReceiver bằng cách sử dụng biến tĩnh. Nhưng tôi muốn biết nguyên nhân của vấn đề này.
PS Nút phát/tạm dừng/trước/tiếp theo hoạt động tốt cho trình phát nhạc mặc định của Android.
* doh * Yup! Tôi bị chậm lại>. <;; Cảm ơn bạn – user2275463