我正在創建一個在用于接收USB插入廣播的機制。廣播是在一個Fragment中。
我嘗試了第一種方法,結果是可行的。我是直接在 onCreate 中 new 了一個 broadcast 然后 重寫 onReceive,在onResume注冊Filter和廣播接收器,在 onDestory中注銷接收器。
然后我想把廣播接收器專門放在一個單獨的類,稱之為 UsbBroadcastReceiver,然后里面重寫了 onReceive。在Fragment的 onCreate 中new了這個類。其他注冊和注銷都沒有變化。但是這樣的寫法,我沒有辦法接收到 USB 插入的廣播。我在想是不是我在創建類和使用這個broadcast中的時候是不是有什么問題? 不知道能否有人給我解答這個問題,謝謝
onReceive方法
public class UsbBroadcastReceiver extends BroadcastReceiver {
private static final String TAG = "UsbBroadcastReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "onReceive: " + intent.getAction());
String intentAction = intent.getAction();
if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(intentAction)) {
Log.d(TAG, "onReceive: 廣播接收到了 插入了USB設備 的intent");
}
}
}
Filter注冊廣播的方法,這個方法會在 onResume 中被呼叫
private void setFilter() {
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_USB_PERMISSION);
filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
getActivity().getApplicationContext().registerReceiver(mUsbReceiver, filter);
}
onCreate中new了我的廣播接收器
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mUsbReceiver = new UsbBroadcastReceiver();
Log.d(TAG, "onCreate: first create.");
}
uj5u.com熱心網友回復:
你確認使用的是同一個Context物件嗎uj5u.com熱心網友回復:
謝謝,您的回答很有意思。事實上,我覺得應該也是這個問題,但是我對context的理解不夠深入。如果我在Fragment中創建broadcastreceiver,那使用的就是我當前fragment下的背景關系。但在這個案例中,我即使是在我當前的Fragment中去new了我自定義的廣播接收器,卻不能準確的把背景關系傳遞過去。
同樣,如果我有兩個Fragment,同時都創建了廣播接收器,那他們是對全域的廣播都進行處理(只要通過我的filter)。那我怎么去區別這兩個廣播接收器呢?
uj5u.com熱心網友回復:
一個應用的application只可能有一個。你說你用了2個廣播接收器,是不是你類寫重名搞錯了。洗掉無關內容,整個貼出來
uj5u.com熱心網友回復:
換種思路嘛,直接在AndroidManifest.xml中定義廣播接收器噻<receiver
android:name=".UsbBroadcastReceiver"
android:enabled="true"
android:exported="false"
android:label="UsbBroadcastReceiver" >
<intent-filter>
<action android:name="UsbManager.ACTION_USB_DEVICE_ATTACHED" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</receiver>
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/78579.html
標籤:Android
上一篇:使用開放的fastble原始碼出現了記憶體泄漏的錯誤,有能看懂LeakCanary錯誤資訊的么?幫忙解答一下,謝謝
下一篇:安卓手機藍牙訊息廣播延時問題
