Android AltBeacon信标创建应用程序

Android AltBeacon信标创建应用程序,android,bluetooth,beacon,Android,Bluetooth,Beacon,我需要创建一个超级简单的应用程序,只创建一个可检测的蓝牙LE信标,不需要传输任何数据。我选择使用AltBeacon lybrary,因此我用他们提供的一个示例实现了这个应用程序。尽管如此,该应用程序仍会在以下情况下崩溃:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.bluetooth.le.BluetoothLeAdvertiser.StartVertising(android.bluetooth.le.Advertise

我需要创建一个超级简单的应用程序,只创建一个可检测的蓝牙LE信标,不需要传输任何数据。我选择使用AltBeacon lybrary,因此我用他们提供的一个示例实现了这个应用程序。尽管如此,该应用程序仍会在以下情况下崩溃:
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.bluetooth.le.BluetoothLeAdvertiser.StartVertising(android.bluetooth.le.AdvertiseSettings,android.bluetooth.le.AdvertiseData,android.bluetooth.le.AdvertiseCallback)”
我在执行
null
检查时都得到了肯定的结果,因此我不确定我还能做些什么。有人在这个图书馆遇到过麻烦吗

下面的代码是示例的98%。我使用的是安卓5.0

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

import org.altbeacon.beacon.Beacon;
import org.altbeacon.beacon.BeaconParser;
import org.altbeacon.beacon.BeaconTransmitter;

import java.util.Arrays;
import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {

    BeaconTransmitter beaconTransmitter;
    Beacon beacon;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        beacon = new Beacon.Builder()
                .setId1("2f234454-cf6d-4a0f-adf2-f4911ba9ffa6")
                .setId2("1")
                .setId3("2")
                .setManufacturer(0x0118)
                .setTxPower(-59)
                .setDataFields(Arrays.asList(new Long[]{0l}))
                .build();

        if(beacon==null)
            Toast.makeText(getApplicationContext(), "NULL beacon", Toast.LENGTH_LONG).show();
        else
            Toast.makeText(getApplicationContext(), "OK beacon", Toast.LENGTH_LONG).show();

        BeaconParser beaconParser = new BeaconParser().setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25");
        beaconTransmitter = new BeaconTransmitter(getApplicationContext(), beaconParser);

        if(beaconTransmitter==null)
            Toast.makeText(getApplicationContext(), "NULL beacon trasmitter", Toast.LENGTH_LONG).show();
        else
            Toast.makeText(getApplicationContext(), "OK beacon trasmitter", Toast.LENGTH_LONG).show();

        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
             @Override
            public void run() {
                beaconTransmitter.startAdvertising(beacon);
            }
        }, 5000);


    }
}

您需要先检查设备的外围模式支持。使用此代码将帮助您

BluetoothManager btManager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
            BluetoothAdapter btAdapter = btManager.getAdapter();
            if (btAdapter.isEnabled()) 
               boolean isSupported = btAdapter.isMultipleAdvertisementSupported()) ;

您需要先检查设备的外围模式支持。使用此代码将帮助您

BluetoothManager btManager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
            BluetoothAdapter btAdapter = btManager.getAdapter();
            if (btAdapter.isEnabled()) 
               boolean isSupported = btAdapter.isMultipleAdvertisementSupported()) ;

我知道这是一篇老文章,可能没有关系,但请记住打开蓝牙!这就是我犯错误的原因

我知道这是一篇老文章,可能没有什么关系,但请记住打开蓝牙!这就是我犯错误的原因