2015-12-18 2 views
0

Я не могу обнаружить соседние маяки, я следую коду от here, где с помощью приложения сканирования маяка я могу обнаружить маяк, что может быть проблемой.iBeacon не обнаруживает ближайшего маякового устройства

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) { } 
     } 



} 

Manifest

<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> 

Edit:

Согласно ответу ниже я добавил ниже фрагмент кода внутри 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 Я могу обнаружить два маяка.

+0

Каковы идентификаторы двух маяков, обнаруженных с помощью Locate? – davidgyoung

ответ

1

По умолчанию Android Beacon Library будет определять только сообщения AltBeacon. Если вы хотите, чтобы он обнаруживал другие форматы маяков, такие как Eddystone или iBeacon, вы должны предоставить формат BeaconParser для этого маякового типа. Вы можете легко найти различные выражения BeaconParser для типов маяков, выполнив поиск в Google.

+0

Привет, спасибо за ответ, на самом деле вторая ссылка, которую вы предоставили, не работает. – Haris

+0

См. Мой отредактированный вопрос. – Haris

+0

@Haris, я думаю, что проблема в вашем targetSdkVersion = 23. Вы решили свою проблему? – Near1999

Смежные вопросы