iBeacon没有检测到附近的信标设备

时间:2015-12-18 19:04:44

标签: ibeacon-android

我无法检测到附近的信标,我正在关注来自here的代码,其中使用信标扫描应用程序我能够检测到信标,可能是什么问题。

package com.example.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import org.altbeacon.beacon.BeaconConsumer;
import org.altbeacon.beacon.BeaconManager;
import org.altbeacon.beacon.MonitorNotifier;
import org.altbeacon.beacon.Region;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.RemoteException;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;

public class MainActivity extends Activity implements BeaconConsumer{

    private BeaconManager beaconManager;
    protected static final String TAG = "MonitoringActivity";
    EditText editText;// = (EditText)findViewById(R.id.reg_firstname);
    private String line;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText =  (EditText)findViewById(R.id.log);
        beaconManager = BeaconManager.getInstanceForApplication(this);

         beaconManager.bind(this);

    }

    @Override 
    protected void onDestroy() {
        super.onDestroy();
        beaconManager.unbind(this);
    }

     @Override
        public void onBeaconServiceConnect() {
            beaconManager.setMonitorNotifier(new MonitorNotifier() {
            @Override
            public void didEnterRegion(Region region) {
                Log.i(TAG, "I just saw an beacon for the first time!");        
                editText.append("I just saw an beacon for the first time!");
            }

            @Override
            public void didExitRegion(Region region) {
                Log.i(TAG, "I no longer see an beacon");
                editText.append("I no longer see an beacon");
            }

            @Override
                public void didDetermineStateForRegion(int state, Region region) {
                Log.i(TAG, "I have just switched from seeing/not seeing beacons: "+state);   
                editText.append("I have just switched from seeing/not seeing beacons: "+state);
                }
            });

            try {
                beaconManager.startMonitoringBeaconsInRegion(new Region("myMonitoringUniqueId", null, null, null));
            } catch (RemoteException e) {    }
        }



}

清单

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="23" />


<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.BLUETOOTH" />
 <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
 <uses-permission android:name="android.permission.READ_LOGS" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

     <activity
        android:name="com.example.test.RegisterActivity"
        android:label="title_register" >

     </activity>

     <service android:enabled="true"
         android:exported="true" 
         android:isolatedProcess="false" 
         android:label="beacon" 
         android:name="org.altbeacon.beacon.service.BeaconService">
    </service> 

    <service android:enabled="true" 
         android:name="org.altbeacon.beacon.BeaconIntentProcessor"> 
    </service>

</application>

修改

根据以下答案,我在onCreate()

中添加了以下代码段
        beaconManager.getBeaconParsers().clear();
        beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));//ALTBEACON_LAYOUT
        beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("s:0-1=feaa,m:2-2=00,p:3-3:-41,i:4-13,i:14-19"));//EDDYSTONE_UID_LAYOUT
        beaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));//Kontakt beacon
        beaconManager.setForegroundScanPeriod(1000l);
        beaconManager.setForegroundBetweenScanPeriod(10000l);

但它只显示了一个信标设备。但是在这里使用应用程序https://play.google.com/store/apps/details?id=com.radiusnetworks.locate&hl=en我能够检测到两个信标。

1 个答案:

答案 0 :(得分:1)

默认情况下,Android Beacon Library只会检测AltBeacon传输。如果您希望它检测其他信标格式,如Eddystone或iBeacon,则必须为该信标类型提供BeaconParser格式。您可以通过Google搜索轻松找到信标类型的不同BeaconParser表达式。