2011-06-24 9 views
1

私は、Bluetoothを管理する設定アプリで「新しいアプリ」をやっています。私は次の問題を抱えている:私は私の活動は、次のandroidの意図はフレームワークによって送信されたときに起動されるようにしたい:android.bluetooth.device.action.PAIRING_REQUESTマニフェストのインテントフィルタでアクティビティが起動しない

をこのため、私は中のAndroidManifest.xmlにこれを追加しました設定アプリ:

<activity android:name=".mybt.MyBluetoohSettings"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
    <intent-filter> 
     <action android:name="android.bluetooth.device.action.PAIRING_REQUEST" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 

問題は、その意図がフレームワークによって送信されたら....私のアプリは起動していません!

私も(MAIN & PAIRING_REQUEST意図して)1つだけの意図・フィルタを使用して、それを試してみた

理論的にはこれが右、動作するはず?私は間違って何をしていますか?提案?

ありがとうございました!

答えて

0

Bluetoothペアリング要求は、アクティビティではなくReceiver(BroadcastReceiverから拡張)によって処理する必要があります。このようなものになりますので<application>の内側に、要素を含まなければならないあなたのマニフェスト、:アプリケーション内のどこかに

<receiver android:name=".MyReceiver"> 
     <intent-filter> 
      <action android:name="android.bluetooth.device.action.PAIRING_REQUEST" /> 
     </intent-filter> 
    </receiver> 

そして、あなたは、クラスと呼ばれるMyReceiverがあるでしょう:

public class MyReceiver extends BroadcastReceiver { 

    public void onReceive(Context context, Intent intent) { 

     // 
     // Handle the pairing request 
     // 
    } 
} 
+0

はい、私はしました元のBluetoothアプリでそれを見た。しかし、私はなぜ彼らがそれを行うのか分かりません。代わりにアクティビティを使用できないのはなぜですか?あなたはそれを説明できますか? 私の問題は、今、私の活動はインテントフィルターを備えた放送受信機オブジェクトを持っているということです。したがって、私のアクティビティがインスタンス化されると、レシーバが登録され、そのインテントを処理できます。しかし、もしそうでなければ...私はそれを起動するアンドロイドします。このアーキテクチャの提案はありますか? ありがとう! – sirlion

+0

Androidの中の放送の性質だけです。ペアリング要求に関心のある複数のアプリケーションが存在する可能性があるため、ブロードキャスト受信者が使用されます。しかし、その動作は同じでなければなりません。ブロードキャストレシーバーがマニフェストに登録されている場合、Androidがアプリケーションを起動し、その時点でアプリケーションが実行されていない場合でも、イベントが発生するとBroadcastReceiverが呼び出されます。アプリがクラッシュしたり、強制終了されたりすると、これは機能しません。これが望ましい動作であれば、Androidが再起動しようとする固定サービスを作成する必要があります。 – Mark

関連する問題