Android应用程序发现附近的iPhone设备

时间:2017-08-29 07:33:54

标签: android ios iphone bluetooth android-6.0-marshmallow

我正在开发一个Android应用程序,我在其中显示附近的iPhone设备。我使用标准的Android蓝牙API以及Android蓝牙LE API来扫描附近的iPhone。但是我无法获得iPhone的列表。

注意:

  1. 我看到Stock Android中的设置应用程序能够显示所有设备。
  2. 目标Android操作系统 - Marshmallow。
  3. 我是Android的新手。请详细说明答案,以便我更好地理解。我检查了Google上的其他链接,但没有得到我想要的结果。

    标准Android蓝牙扫描/发现(扫描并显示附近的设备,但不能显示iPhone)

    private void displayListOfFoundDevices(){
    
    arrayOfFoundBTDevices = new ArrayList<BluetoothObject>();
    
    // start looking for bluetooth devices
    mBluetoothAdapter.startDiscovery();
    
    // Discover new devices
    // Create a BroadcastReceiver for ACTION_FOUND
    final BroadcastReceiver mReceiver = new BroadcastReceiver()
    {
        @Override
        public void onReceive(Context context, Intent intent)
        {
            String action = intent.getAction();
            // When discovery finds a device
            if (BluetoothDevice.ACTION_FOUND.equals(action))
            {
                // Get the bluetoothDevice object from the Intent
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
    
                // Get the "RSSI" to get the signal strength as integer,
                // but should be displayed in "dBm" units
                int rssi = intent.getShortExtra(BluetoothDevice.EXTRA_RSSI,Short.MIN_VALUE);
    
                // Create the device object and add it to the arrayList of devices
                BluetoothObject bluetoothObject = new BluetoothObject();
                bluetoothObject.setBluetooth_name(device.getName());
                bluetoothObject.setBluetooth_address(device.getAddress());
                bluetoothObject.setBluetooth_state(device.getBondState());
                bluetoothObject.setBluetooth_type(device.getType());    // requires API 18 or higher
                bluetoothObject.setBluetooth_uuids(device.getUuids());
                bluetoothObject.setBluetooth_rssi(rssi);
    
                arrayOfFoundBTDevices.add(bluetoothObject);
    
                // 1. Pass context and data to the custom adapter
                FoundBTDevicesAdapter adapter = new FoundBTDevicesAdapter(getApplicationContext(), arrayOfFoundBTDevices);
    
                // 2. setListAdapter
                setListAdapter(adapter);
            }
        }
    };
    // Register the BroadcastReceiver
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
    registerReceiver(mReceiver, filter);  }
    

    BluetoothLE代码段(扫描并显示附近的设备,但不显示iPhone)

        btManager =(BluetoothManager)getSystemService(Context.BLUETOOTH_SERVICE);
        btAdapter = btManager.getAdapter();
        btScanner = btAdapter.getBluetoothLeScanner();
    
    
        if (btAdapter != null && !btAdapter.isEnabled()) {
            Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
            startActivityForResult(enableIntent,REQUEST_ENABLE_BT);
        }
    
        // Make sure we have access coarse location enabled, if not, prompt the user to enable it
        if (this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            final AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("This app needs location access");
            builder.setMessage("Please grant location access so this app can detect peripherals.");
            builder.setPositiveButton(android.R.string.ok, null);
            builder.setOnDismissListener(new DialogInterface.OnDismissListener() {
                @Override
                public void onDismiss(DialogInterface dialog) {
                    requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION);
                }
            });
            builder.show();
        }
    }
    
    // Device scan callback.
    private ScanCallback leScanCallback = new ScanCallback() {
        @Override
        public void onScanResult(int callbackType, ScanResult result) {
            Log.i("Main","Scan Result: Add: " +result.getDevice().getAddress());
            peripheralTextView.append("Device Name: " + result.getDevice().getName()+ " add: " + result.getDevice().getAddress() + " rssi: " + result.getRssi() + "\n");
    
            // auto scroll for text view
            final int scrollAmount = peripheralTextView.getLayout().getLineTop(peripheralTextView.getLineCount()) - peripheralTextView.getHeight();
            // if there is no need to scroll, scrollAmount will be <=0
            if (scrollAmount > 0)
                peripheralTextView.scrollTo(0, scrollAmount);
        }
    };
    

0 个答案:

没有答案