Tôi đã làm việc qua the description and samples for USB host at developer.android.com để phát hiện thiết bị USB được đính kèm và tách rời.Máy chủ lưu trữ USB 3.1 của Android - Trình phát sóng không nhận được USB_DEVICE_ATTACHED
Nếu tôi sử dụng bộ lọc ý định trong tệp kê khai để khởi động ứng dụng khi thiết bị được kết nối, thiết bị hoạt động hoàn toàn tốt: Cắm, phát hiện thiết bị, android yêu cầu quyền khởi động ứng dụng, thông tin thiết bị được hiển thị trong một cái bàn.
Ứng dụng tôi đang phát triển không được bắt đầu/kết thúc chỉ khi thiết bị được gắn/tách rời (ví dụ: mục đích quản lý dữ liệu). Ngoài ra tôi không muốn hộp thoại mở bật lên nếu ứng dụng đang chạy. Vì vậy, tôi quyết định không bắt đầu hoạt động trực tiếp nếu một thiết bị được gắn, nhưng để đăng ký một BroadcastReceiver, đó là (sau này) phải thông báo cho các hoạt động nếu một thiết bị được tại-/tách ra. Người nhận này nhận ra hành động tách rời, nhưng không chấp nhận hành động đính kèm.
Tôi có bị thiếu quyền hoặc thuộc tính dữ liệu hay gì đó tương tự không? Hướng dẫn và các mẫu không nói bất cứ điều gì về các thuộc tính cần thiết bổ sung.
Dưới đây là file manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="de.visira.smartfdr"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="12" />
<uses-feature android:name="android.hardware.usb.host" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<receiver android:name=".usb.Detector">
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
<action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
</intent-filter>
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
<meta-data android:name="android.hardware.usb.action.USB_DEVICE_DETACHED"
android:resource="@xml/device_filter" />
</receiver>
</application>
Và người nhận:
public class FDRDetector extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Toast.makeText(context, "Action: " + action, 3).show();
// pops up only if action == DETACHED
}
Tôi không hiểu tại sao cùng một công trình ý định lọc, nếu tôi sử dụng chúng trên một hoạt động, nhưng không phải nếu chúng được áp dụng cho một người nhận? Ngay cả khi tôi thiết lập bộ thu và bộ lọc trong mã, các phần đính kèm không được nhận dạng.
môi trường My work: IDE: Eclipse 3.7 với Android Plugin
Device: Acer Iconia Tab A500
Android: 3.1
Cảm ơn trước
Hãy thử ghi đè trênNewIntent() - nó được gọi khi bạn sử dụng android: launchMode = "singleTop" và có thể giải quyết tình huống của bạn khá độc đáo. onResume() luôn được gọi sau đó. – Gusdor
Bạn có thể giải thích đoạn đầu tiên của bạn "Ý chính của nó là" không? Nó trông rất bối rối với tôi. –
Cảm ơn, tôi đã tự hỏi điều tương tự. Tốt để biết đó là một cái gì đó mà không hoạt động. Mùi như một lỗi Android cho tôi. – Brian