2011-06-26 6 views
3

私のコードは何かが間違っています。Broadcast ReceiverでUSBを検出する - 何が欠けていますか?

私はUSBOnRecieverの放送受信機を作成しました。

<application> 
    <receiver android:name=".USBOnReceiver" android:enabled="true" 
     android:exported="true"> 
     <intent-filter> 
      <action android:name="android.intent.action.UMS_CONNECTED" /> 
     </intent-filter> 
    </receiver> 

</application> 

と、ここで私が立ち往生したときである:

public class USBOnReceiver extends BroadcastReceiver 
{ 
@Override 
public void onReceive(Context context, Intent intent) 
{ 
    Toast.makeText(context, "Phone was connected to power" ,Toast.LENGTH_LONG).show(); 
    Log.d("tag", "Phone was connected to power"); 
} 
} 

私のマニフェストです。 USB接続時に何も起こりません(私もpower_connectedで試しました)。

BRをマニフェストまたはプログラマティックに登録することができます。しかし、どのように実装するか分からない。私は

 USBOnReceiver myReceiver = new USBOnReceiver(); 

を追加しました。しかし、それはそうと未接続無用に見える私の活動で

: -/

はここにあなたの目に感謝します。

+0

マニフェストの種類を修正しました – Saariko

答えて

2

コードが完成したようです。あなたが間違っていない場合は、 唯一の問題は次のとおりです。受信者の代わりにマニフェスト内に受信者を書きました。 したがって、BroadcastReceiverは正しく登録されませんでした。

コード登録のトピックへ:

これは可能です。レシーバー のインスタンスを作成し、Context.registerReceiver(mReceiver、new IntentFilter(...))を使用してください。

マニフェストに登録している場合は、そのマニフェストを行う必要はありません。 BroadcastReceiversはonReceive()の実行時にのみ有効です。したがって、 システムはインスタンスを作成し、その後それらを強制終了します。

+0

ありがとう、誤植が修正されました。しかし、何も起こりません。私がUSBに接続すると、定期的な通知:USB接続されていますが、私はトーストやログを取得しません。テストするには何が良い方法ですか?私の活動で何かが欠けていますか?私は気持ちがある。 アクティビティに何かを追加してはいけませんか?つまり、明示的な登録だけでは、それほど壊れやすいようです。 -/ あなたのコメントをもう一度読むと、自分のアクティビティでインスタンス化する必要はありません。 OK、試し続けます – Saariko

+0

USBマスストレージ機能を使用していますか(コンピュータからSDカードにアクセスする場合は「USBスティックモード」となりますか?)ドキュメントによると、これはあなたがそれを使用するときにのみ起動し、あなたが充電するためにusbに接続するときではありません。 –

+0

ありがとうalex。私は何が間違っていたのか分かりませんが、まずアプリケーションの必要性のために、私はマニフェストから登録を削除し、それを実行時に配置します。 BRが実行されているときに私のサービスを更新する必要がありますが、後でそれに取り掛かります。この問題は、ありがとうございます。 – Saariko

関連する問題