2011-01-31 43 views
7

Tôi đang cố gắng nắm bắt thẻ NFC trong bộ thu phát vì vậy tôi đã viết BR đơn giản in "asd" trong onReceive(). Trong xml manifest nó desribed như thế:Thẻ NFC Android nhận được với bộ phát sóng

và tôi chỉ nhận này và không in ở tất cả ....

01-31 16:37:18.980: ERROR/MediaPlayer(990): setAudioStream called in state 8 
01-31 16:37:18.980: ERROR/MediaPlayer(990): error (-38, 0) 
01-31 16:37:18.980: ERROR/MediaPlayer(990): start called in state 0 
01-31 16:37:18.980: ERROR/MediaPlayer(990): error (-38, 0) 
01-31 16:37:18.988: ERROR/MediaPlayer(990): Error (-38,0) 

Khi tôi sử dụng để hoạt động xử lý mục đích như sau:

<activity android:name="TagViewer" 
      android:theme="@android:style/Theme.NoTitleBar"> 
      <intent-filter> 
       <action android:name="android.nfc.action.TAG_DISCOVERED"/> 
       <category android:name="android.intent.category.DEFAULT"/> 
      </intent-filter> 
</activity> 

Hoạt động được bắt đầu và hoạt động hoàn hảo, vậy làm cách nào tôi có thể làm cho nó hoạt động với BroadcastReceiver?

+0

Tôi xin lỗi vì nhận xét dint đã chấp nhận mã manifest.xml Tôi không biết tại sao không có gì lạ ở đó, tôi chỉ sử dụng: action android: name = "android.nfc.action.TAG_DISCOVERED" và danh mục android: name = "android.intent.category.DEFAULT" Vì vậy, tôi nghĩ rằng ý định NFC chỉ không muốn bắt đầu nhận và nó chỉ hoạt động với các hoạt động, tại sao? –

+0

Bây giờ bạn nên sử dụng :) – xil3

+0

Bạn có thể đăng mã nhận truyền phát của mình không? – xil3

Trả lời

9

Bạn không thể. Như bạn đã chỉ ra, bộ điều hợp NFC đang sử dụng một cái gì đó rất giống như startActivity() để gửi ra một ý định với thông tin thẻ trong đó. Nó không phải là chính xác giống như những gì chúng tôi có thể thực hiện trong SDK Android vì thẻ NFC là đặc biệt. Ví dụ, bạn không thể thi đua startActivity() một mình cho bất cứ điều gì ngoại trừ TAG_DISCOVERED, đó là hành động của phương sách cuối cùng và không hữu ích khủng khiếp.

Tôi nghĩ lý do cho điều này là do việc xử lý đặc biệt các mục đích NFC. Khi thẻ được phần cứng NFC phát hiện, thẻ sẽ tìm kiếm thứ gì đó sẽ xử lý thẻ. Hoạt động Foreground được thử đầu tiên. Nó cố gắng một mục đích NDEF_DISCOVERED tiếp theo nếu nó có thể, và tìm kiếm một hoạt động để lấy nó. Nếu nó không thể tìm thấy nó, nó sẽ cố ý với TECH_DISCOVERED. Một lần nữa, nếu không tìm thấy hoạt động nào, nó cuối cùng sẽ cố gắng TAG_DISCOVERED. Nếu nó sử dụng một chương trình phát sóng, làm thế nào nó có thể làm điều này ngược lại logic để tiếp tục cố gắng tìm một cái gì đó để xử lý các thẻ? Làm thế nào nó sẽ biết nếu bất cứ điều gì đã được hành động trên ý định thẻ? Và làm thế nào nó có thể đảm bảo rằng chỉ có một điều sẽ hành động trên thẻ?

8

Bạn có thể viết một hoạt động nhỏ không hiển thị bất kỳ giao diện người dùng nào, gửi một tin nhắn quảng bá và sau đó kết thúc bằng kết thúc(). Sử dụng cờ trong biểu hiện, bạn có thể tránh nó hiển thị trong lịch sử hoặc trong recents và được faily vô hình, hy vọng nhận được một hiệu ứng tương tự như bạn mong muốn với người nhận braodcast.

+0

Vẫn cần phải thêm cả hai vào tệp kê khai ... (Đó là những gì tôi đang cố gắng tránh) – TacB0sS

Các vấn đề liên quan