安卓5.0蓝牙低功耗 代码

package com.example.blue;

import java.nio.charset.Charset;
import java.util.List;
import java.util.UUID;

import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.le.AdvertiseCallback;
import android.bluetooth.le.AdvertiseData;
import android.bluetooth.le.AdvertiseSettings;
import android.bluetooth.le.BluetoothLeAdvertiser;
import android.bluetooth.le.BluetoothLeScanner;
import android.bluetooth.le.ScanCallback;
import android.bluetooth.le.ScanResult;
import android.os.Bundle;
import android.os.Handler;
import android.os.ParcelUuid;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class BluetoothMainActivity extends Activity implements OnClickListener {
	private BluetoothLeAdvertiser advertiser;
	private TextView mText;
	private Button mDiscoverButton;
	private Button mAdvertiseButton;
	BluetoothLeScanner mBluetoothLeScanner;
	Handler handler;

	public void onCreate(Bundle b) {

		super.onCreate(b);
		setContentView(R.layout.ff);
		mText = (TextView) findViewById(R.id.text);
		mDiscoverButton = (Button) findViewById(R.id.discover_btn);
		mAdvertiseButton = (Button) findViewById(R.id.advertise_btn);
		mDiscoverButton.setOnClickListener(this);
		mAdvertiseButton.setOnClickListener(this);
		handler = new Handler();
		advertiser = BluetoothAdapter.getDefaultAdapter()
				.getBluetoothLeAdvertiser();
		mBluetoothLeScanner = BluetoothAdapter.getDefaultAdapter()
				.getBluetoothLeScanner();
		if (!BluetoothAdapter.getDefaultAdapter()
				.isMultipleAdvertisementSupported()) {
			Toast.makeText(this, "Multiple advertisement not supported",
					Toast.LENGTH_SHORT).show();
			mAdvertiseButton.setEnabled(false);
			mDiscoverButton.setEnabled(false);
		}
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		if (v.getId() == R.id.discover_btn) {
			discover();
		} else if (v.getId() == R.id.advertise_btn) {
			advertise();

		}

	}

	private void discover() {

		handler.postDelayed(new Runnable() {

			@Override
			public void run() {
				// TODO Auto-generated method stub
				mBluetoothLeScanner.stopScan(mScanCallback);
				
			}
		}, 10 * 1000);
		mBluetoothLeScanner.startScan(mScanCallback);
	}

	private void advertise() {
		// TODO Auto-generated method stub
		AdvertiseSettings settings = new AdvertiseSettings.Builder()
				.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY)
				.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH)
				.setConnectable(false).build();
		ParcelUuid pUuid = new ParcelUuid(UUID.fromString(""));
		AdvertiseData data = new AdvertiseData.Builder()
				.setIncludeDeviceName(true)
				.addServiceUuid(pUuid)
				.addServiceData(pUuid,
						"Data".getBytes(Charset.forName("UTF-8"))).build();
		final AdvertiseCallback advertisingCallback = new AdvertiseCallback() {
			@Override
			public void onStartSuccess(AdvertiseSettings settingsInEffect) {
				super.onStartSuccess(settingsInEffect);
			}

			@Override
			public void onStartFailure(int errorCode) {

				super.onStartFailure(errorCode);
			}
		};
		advertiser.startAdvertising(settings, data, advertisingCallback);

	}

	private ScanCallback mScanCallback = new ScanCallback() {
		@Override
		public void onScanResult(int callbackType, ScanResult result) {
			super.onScanResult(callbackType, result);
			if (result == null || result.getDevice() == null
					|| TextUtils.isEmpty(result.getDevice().getName()))
				return;
			StringBuilder builder = new StringBuilder(result.getDevice()
					.getName());
			builder.append("/n").append(
					new String(result.getScanRecord().getServiceData(
							result.getScanRecord().getServiceUuids().get(0)),
							Charset.forName("UTF-8")));
			mText.setText(builder.toString());
		}

		@Override
		public void onBatchScanResults(List<ScanResult> results) {
			super.onBatchScanResults(results);
		}

		@Override
		public void onScanFailed(int errorCode) {

			super.onScanFailed(errorCode);
		}
	};
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值