2013-07-31 34 views
12

印刷用にBluetoothを使用する内部アプリケーションを開発しています。私は、Bluetoothのペアリングがユーザーの入力なしで発生したい。私はandroid.bluetooth.device.action.PAIRING_REQUESTブロードキャストをトラップすることでそれを実現することができました。AndroidのBluetoothペアリング防止ダイアログ

私のブロードキャスト受信機では、setPinメソッドを呼び出し、ペアリングは正常に動作しますが、BluetoothPairingDialogが2〜2回表示されてから消えます。下のリンクを参照してください。

https://github.com/android/platform_packages_apps_settings/blob/master/src/com/android/settings/bluetooth/BluetoothPairingDialog.java

放送が非命じているので、私はabortBroadcast()を呼び出すことはできません、と表示され、ペアリングダイアログを防ぐために、他の方法があったかと思いまして。何らかの方法でウィンドウマネージャにフックすることはできますか?

+0

私は同じ問題を抱えています。私はdevice.cancelPairingUserInput();を呼び出してユーザの入力なしでダイアログを閉じることができます。 device.setPairingConfirmation(true); BluetoothDevice.ACTION_BOND_STATE_CHANGEDアクションがBluetoothDevice.BOND_BONDING状態で受信された後でなければ、ダイアログが短時間表示されて終了します。 –

答えて

3

私は正直なところ、sdkを変更せずにこれを行う方法を考え出すことができませんでした。あなたがOEMであれば、それは(私は4.3によ)簡単です:

パッケージ/アプリケーション/設定/のAndroidManifest.xmlで、ペアリングダイアログのインテントフィルタをコメント枠組みで

<activity android:name=".bluetooth.BluetoothPairingDialog" 
      android:label="@string/bluetooth_pairing_request" 
      android:excludeFromRecents="true" 
      android:theme="@*android:style/Theme.Holo.Dialog.Alert"> 
    <!-- <intent-filter> 
     <action android:name="android.bluetooth.device.action.PAIRING_REQUEST" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> --> 
</activity> 

をこの定数

@SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) 
public static final String ACTION_PAIRING_REQUEST = 
     "android.bluetooth.device.action.PAIRING_REQUEST"; 

及びこの方法から@hide Javadocの注釈を削除/base/core/java/android/bluetooth/BluetoothDevice.java

public boolean setPairingConfirmation(boolean confirm) 

次に、BluetoothDevice.PAIRING_REQUESTアクションのために、自分のアクティビティまたはブロードキャストレシーバを登録します。この放送受信機は、(何のピンが必要とされていない場合のみ)ペアリングがユーザーの入力なしに続けることができます:

@Override 
public void onReceive(Context context, Intent intent) {  
    if(intent.getAction().equals(BluetoothDevice.ACTION_PAIRING_REQUEST)) { 
     BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 
     device.setPairingConfirmation(true); 
    } 
} 

SDKを再構築し、定数およびメソッドへのアクセスを取得するために、新しいバージョンに対して自分のコードをコンパイルする必要がありますダイアログボックスを無効にするには、/ systemパーティションのSettings.apkを置き換えます。あなたはおそらくシステムアプリとして実行する必要があるかもしれないが、私はそうは思わない。

関連する問題