2013-07-31 12 views
12

Baskı için Bluetooth kullanan bir dahili uygulama geliştiriyorum. Bluetooth eşleştirmesinin kullanıcı girişi olmadan gerçekleşmesini istiyorum. Bu çalışmayı android.bluetooth.device.action.PAIRING_REQUEST yayını yakalayarak elde etmeyi başardım.Android Bluetooth Eşleştirme İletişimini Önleyin

Yayın alıcımda setPin yöntemini çağırıyorum ve eşleştirme işleri tamam, ancak bir veya iki saniye için BluetoothPairingDialog görüntüleniyor, sonra kayboluyor - aşağıdaki bağlantıya bakın. yayın dışı sipariş olduğundan

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

, ben abortBroadcast() arayamam ve görüntülenmesini eşleştirme iletişim önlemek için başka bir yol olmadığını merak ediyorum. Pencere yöneticisine bir şekilde bağlanabilir miyim?

+0

Aynı sorunu yaşıyorum. Ben device.cancelPairingUserInput(); device.setPairingConfirmation (doğru); ancak BluetoothDevice.ACTION_BOND_STATE_CHANGED eylemini BluetoothDevice.BOND_BONDING durumuyla aldıktan sonra, iletişim kutusu kısa bir süre için açılır ve ardından işten çıkarılır. –

cevap

3

Gerçekten sdk'yi değiştirmeden bunu yapmanın bir yolunu bulamadım. Eğer OEM iseniz, o (Ben 4,3 olduğum) kolay:

yılında paketler/apps/Ayarlar/AndroidManifest.xml, eşleştirme iletişim için amaç filtresini açıklama: çerçeveler içinde

<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> 

Bu sabit

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

ve bu yöntem ile ilgili @hide javadoc ek açıklama kaldırmak /base/core/java/android/bluetooth/BluetoothDevice.java

public boolean setPairingConfirmation(boolean confirm) 

Ardından BluetoothDevice.PAIRING_REQUEST eylemi için kendi etkinliğinizi veya yayın alıcınızı kaydedin. Bu yayın alıcısı (hayır pim gereklidir yalnızca) eşleştirme kullanıcı girişi olmadan devam etmesini sağlar:

@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); 
    } 
} 

Sen sdk yeniden inşa etmek ve sürekli ve yöntemlere erişmek için yeni sürüme karşı kodunuzu derlemek gerekir ve iletişim kutusunu devre dışı bırakmak için/system bölümüne Settings.apk dosyasını değiştirin. Ayrıca bir sistem uygulaması olarak da çalıştırmanız gerekebilir, ancak büyük olasılıkla değil.