2013-07-31 46 views
12

Tôi đang phát triển một ứng dụng nội bộ sử dụng Bluetooth để in. Tôi muốn ghép nối Bluetooth xảy ra mà không cần đầu vào của người dùng. Tôi đã cố gắng làm việc đó bằng cách bẫy phát sóng android.bluetooth.device.action.PAIRING_REQUEST.Android Ngăn chặn Hộp thoại ghép nối Bluetooth

Trong bộ thu phát, tôi gọi phương thức setPin và ghép nối hoạt động ok, nhưng BluetoothPairingDialog được hiển thị trong một hoặc hai giây, sau đó biến mất - xem liên kết bên dưới.

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

Kể từ khi phát sóng là không ra lệnh, tôi không thể gọi abortBroadcast(), và đã tự hỏi nếu có bất kỳ cách nào khác để ngăn chặn hộp thoại cặp đôi xuất hiện. Tôi có thể móc vào trình quản lý cửa sổ theo cách nào đó không?

+0

Tôi gặp vấn đề tương tự. Tôi có thể bỏ qua hộp thoại mà không cần người dùng nhập vào bằng cách gọi device.cancelPairingUserInput(); device.setPairingConfirmation (true); nhưng chỉ sau khi nhận được hành động BluetoothDevice.ACTION_BOND_STATE_CHANGED với trạng thái BluetoothDevice.BOND_BONDING để hộp thoại xuất hiện một thời gian ngắn và sau đó được loại bỏ. –

Trả lời

3

Tôi thành thật không thể tìm ra cách để làm điều này mà không sửa đổi sdk. Nếu bạn là OEM, thật dễ dàng (Tôi đang trên 4.3):

Trong gói/apps/Cài đặt/AndroidManifest.xml, bình luận bộ lọc ý định cho hộp thoại cặp đôi:

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

Trong khuôn khổ /base/core/java/android/bluetooth/BluetoothDevice.java loại bỏ các chú thích @hide javadoc từ này liên tục

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

và phương pháp này

public boolean setPairingConfirmation(boolean confirm) 

Sau đó đăng ký hoạt động của riêng bạn hoặc bộ thu phát sóng cho hành động BluetoothDevice.PAIRING_REQUEST. máy thu phát sóng này cho phép cặp đôi tiếp tục mà không sử dụng đầu vào (chỉ nếu không có pin được bắt buộc):

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

Bạn sẽ cần phải xây dựng lại các sdk và biên dịch mã của bạn chống lại các phiên bản mới để có được quyền truy cập vào các hằng số và phương pháp và thay thế Settings.apk trên phân vùng/hệ thống để tắt hộp thoại. Bạn có thể cũng có thể cần phải chạy như một ứng dụng hệ thống nhưng tôi nghĩ rằng có khả năng không.

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