Back to project page accessory-samples.
The source code is released under:
Copyright (c) 2012 Wireless Designs, LLC Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in ...
If you think the Android project accessory-samples listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
package com.example.android.bluetoothadvertiser; //from w w w .j av a2 s.co m import android.app.Activity; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothManager; import android.bluetooth.le.AdvertiseCallback; import android.bluetooth.le.AdvertiseData; import android.bluetooth.le.AdvertiseSettings; import android.bluetooth.le.BluetoothLeAdvertiser; import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; import android.os.ParcelUuid; import android.util.Log; import android.view.View; import android.widget.SeekBar; import android.widget.TextView; import android.widget.Toast; /** * Dave Smith * Date: 11/12/14 * AdvertiserActivity */ public class AdvertiserActivity extends Activity implements SeekBar.OnSeekBarChangeListener { private static final String TAG = "AdvertiseActivity"; private static final int DEFAULT_VALUE = 20; /* Full Bluetooth UUID that defines the Health Thermometer Service */ public static final ParcelUuid THERM_SERVICE = ParcelUuid.fromString("00001809-0000-1000-8000-00805f9b34fb"); private BluetoothAdapter mBluetoothAdapter; private BluetoothLeAdvertiser mBluetoothLeAdvertiser; /* UI to control advertise value */ private TextView mCurrentValue; private SeekBar mSlider; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_advertiser); mCurrentValue = (TextView) findViewById(R.id.current); mSlider = (SeekBar) findViewById(R.id.slider); mSlider.setMax(100); mSlider.setOnSeekBarChangeListener(this); mSlider.setProgress(DEFAULT_VALUE); /* * Bluetooth in Android 4.3+ is accessed via the BluetoothManager, rather than * the old static BluetoothAdapter.getInstance() */ BluetoothManager manager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE); mBluetoothAdapter = manager.getAdapter(); mBluetoothLeAdvertiser = mBluetoothAdapter.getBluetoothLeAdvertiser(); } @Override protected void onResume() { super.onResume(); /* * We need to enforce that Bluetooth is first enabled, and take the * user to settings to enable it if they have not done so. */ if (mBluetoothAdapter == null || !mBluetoothAdapter.isEnabled()) { //Bluetooth is disabled Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivity(enableBtIntent); finish(); return; } /* * Check for Bluetooth LE Support. In production, our manifest entry will keep this * from installing on these devices, but this will allow test devices or other * sideloads to report whether or not the feature exists. */ if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) { Toast.makeText(this, "No LE Support.", Toast.LENGTH_SHORT).show(); finish(); return; } /* * Check for advertising support. Not all devices are enabled to advertise * Bluetooth LE data. */ if (!mBluetoothAdapter.isMultipleAdvertisementSupported()) { Toast.makeText(this, "No Advertising Support.", Toast.LENGTH_SHORT).show(); finish(); return; } startAdvertising(); } @Override protected void onPause() { super.onPause(); stopAdvertising(); } private void startAdvertising() { if (mBluetoothLeAdvertiser == null) return; AdvertiseSettings settings = new AdvertiseSettings.Builder() .setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_BALANCED) .setConnectable(false) .setTimeout(0) .setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_MEDIUM) .build(); AdvertiseData data = new AdvertiseData.Builder() .setIncludeDeviceName(true) .setIncludeTxPowerLevel(true) .addServiceUuid(THERM_SERVICE) .addServiceData(THERM_SERVICE, buildTempPacket()) .build(); mBluetoothLeAdvertiser.startAdvertising(settings, data, mAdvertiseCallback); } private void stopAdvertising() { if (mBluetoothLeAdvertiser == null) return; mBluetoothLeAdvertiser.stopAdvertising(mAdvertiseCallback); } private void restartAdvertising() { stopAdvertising(); startAdvertising(); } private byte[] buildTempPacket() { int value; try { value = Integer.parseInt(mCurrentValue.getText().toString()); } catch (NumberFormatException e) { value = 0; } return new byte[] {(byte)value, 0x00}; } private AdvertiseCallback mAdvertiseCallback = new AdvertiseCallback() { @Override public void onStartSuccess(AdvertiseSettings settingsInEffect) { Log.i(TAG, "LE Advertise Started."); } @Override public void onStartFailure(int errorCode) { Log.w(TAG, "LE Advertise Failed: "+errorCode); } }; /** Click handler to update advertisement data */ public void onUpdateClick(View v) { restartAdvertising(); } /** Callbacks to update UI when slider changes */ @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { mCurrentValue.setText(String.valueOf(progress)); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }