2

iBeaconProject で BroadcastReceiver を使用して、onReceive からさまざまな信号を受信して​​います。私がやりたいのは、(指定した) ビーコンの 1 つだけを追跡することであり、それは私の電話からビーコンまでの距離です。アイデアはありますか?私を助けてください!http://www.radiusnetworks.comを使用しています。次の onReceive 関数を使用して、さまざまなシグナルを取得しています。どうすればそれを行うことができますか?よろしくお願いします!

BroadcastReceiver bReceiver = new BroadcastReceiver() {


    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        int countBea = 0; 
        if (intent.getAction().equals(intentname) && intent.getExtras() != null && intent.getExtras().containsKey(intentname)) {
            Collection<IBeacon> beaconsCol = (Collection<IBeacon>)intent.getExtras().getSerializable(intentname);

            for (IBeacon bea : beaconsCol) {

                    Log.d("beac receive!","receive! "+bea.getProximityUuid()+" "+bea.getMajor()+" "+bea.getMinor()+" "+bea.getAccuracy()+" "+bea.getProximity()+" "+bea.getRssi()+" "+bea.getTxPower());
                    countBea++;
                     if(((mainActivity)getActivity()).UUIDValue.equalsIgnoreCase(bea.getProximityUuid())
                            && ((mainActivity)getActivity()).MajorValue == bea.getMajor() 
                            && ((mainActivity)getActivity()).MinorValue == bea.getMinor()) {
                        update(bea.getProximityUuid(), +bea.getMajor(), bea.getMinor(), bea.getAccuracy());

                    } else if (((mainActivity)getActivity()).UUIDValue.equalsIgnoreCase(bea.getProximityUuid())
                            && (((mainActivity)getActivity()).MajorValue == 0 ||
                             ((mainActivity)getActivity()).MinorValue == 0)) {
                        updateNILMajorMinor();
                    } else {
                        updateMultipleBeaconsDetected();
                    }

            }
            System.out.println("COUNTBEAC " + countBea);

        }
    }
};
4

2 に答える 2

2

for-each ループが表示されてよかったです。

その中で、追跡したいビーコンを識別できます。

for (IBeacon bea : beaconsCol) {
    //in the following if, identify the specified beacon
    // this will remain the same for every refresh
    if(bea.getProximityUuid().equals("match it here") && bea.getMajor()==major 
        && bea.getMinor()==minor){
    //now display that beacon's proximity and accuracy
    //the same code will update a textview or notification every time

    // here you will have 1 beacon at a time, can add that to a global list
    }
}  

実装の正確なアイデアを教えてください。

あなたのコードは定期的に onReceive に入りますか?

于 2014-05-28T11:04:44.177 に答える
0

ブロードキャストをリッスンして Radius Networks SDK を使用するという言及は見たことがありません。代わりに、特定のインターフェイスを実装し、IBeaconManager.

コード サンプルが役立つ場合があります。そのページには次のスニペットが含まれています。これは、質問のコードと同等であると認識できます。

public class RangingActivity extends Activity implements IBeaconConsumer, RangeNotifier {

    private static final String TAG = RangingActivity.class.getName();
    private IBeaconManager iBeaconManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        iBeaconManager = IBeaconManager.getInstanceForApplication(this);
        iBeaconManager.bind(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        iBeaconManager.unBind(this);
    }

    @Override
    public void onIBeaconServiceConnect() {
        iBeaconManager.setRangeNotifier(this);

        try {
            // edit this to match the UUID of your beacon
            // or leave null to detect everything
            String uuid = null;

            Region region = new Region("myRangingUniqueId", uuid, null, null);
            iBeaconManager.startRangingBeaconsInRegion(region);
        } catch (RemoteException e) {
            Log.e(TAG, "problem while starting ranging", e);
        }
    }

    @Override 
    public void didRangeBeaconsInRegion(Collection<IBeacon> iBeacons, Region region) {
        if (!iBeacons.isEmpty()) {
            double accuracy = iBeacons.iterator().next().getAccuracy();
            Log.i(TAG, "The first iBeacon I see is about " + accuracy + " meters away.");
        }
    }

}
于 2014-05-28T10:49:53.550 に答える