我想使用BroadcastReceiver獲得與USB設備通信的權限。我試圖以它在android網站上完成的相同方式實現它http://developer.android.com/guide/topics/usb/host.html 它的一切正常,有點。 但是,只有在創建主要活動後,broadcastReceiver纔會觸發。這意味着我只有在關閉應用後才能與設備進行通信並再次打開它(當我沒有取消註冊broadcastReceiver時,當我無法通信時)。 可能是什麼原因? 我的代碼是這樣的:活動已創建後BroadcastReceiver觸發
私人最終的BroadcastReceiver mUsbReceiver =新的廣播接收器() {
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
if (ACTION_USB_PERMISSION.equals(action))
{
synchronized (this)
{
device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false))
{
if(device != null)
{
//things I do when the permission is granted
}
}
else
{
devMessage = "permission denied for device ";
}
}
}
}
};
哪裏註冊它的部分代碼:
公共無效的onCreate(捆綁savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
filter = new IntentFilter(ACTION_USB_PERMISSION);
registerReceiver(mUsbReceiver, filter);
HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList();
Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
while(deviceIterator.hasNext())
{
device = deviceIterator.next();
mUsbManager.requestPermission(device, mPermissionIntent);
}
// ...
if(device!=null)
{
// ...
}
else
{
// ...
}
tv.setText(devMessage);
}
有誰知道爲什麼會發生這種情況,我可能會做錯什麼?
謝謝,實際上解決了這個問題(雖然我還是不明白這一點 - 我已經做了的事情只是複製粘貼在Android網站如何獲得許可使用USB設備進行通信) – Magda
@Magda,主要區別在於如果您的清單中定義了操作系統,它可以自行啓動BroadcastReceivers。示例顯示的方式是,在應用程序啓動時註冊它們,因此要求您實際啓動應用程序才能註冊它們。 BroadcastReceivers有自己的生命週期,所以他們不需要在您的活動中註冊。我猜這個例子並不是真正針對持久接收者? :) –