예제 #1
0
        public void TestBeaconAdvertisingBytes()
        {
            Context context = Application.Context;

            Beacon beacon = new Beacon.Builder()
                            .SetId1("2f234454-cf6d-4a0f-adf2-f4911ba9ffa6")
                            .SetId2("1")
                            .SetId3("2")
                            .SetManufacturer(0x0118)
                            .SetTxPower(-59)
                            .SetDataFields(new List <Java.Lang.Long> {
                new Java.Lang.Long(0L)
            })
                            .Build();
            BeaconParser beaconParser = new BeaconParser()
                                        .SetBeaconLayout("m:2-3=beac,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25");

            byte[]            data = beaconParser.GetBeaconAdvertisementData(beacon);
            BeaconTransmitter beaconTransmitter = new BeaconTransmitter(context, beaconParser);

            // TODO: can't actually start transmitter here because Robolectric does not support API 21

            AssertEx.AreEqual("Data should be 24 bytes long", 24, data.Length);
            String byteString = "";

            for (int i = 0; i < data.Length; i++)
            {
                byteString += String.Format("{0:x2}", data[i]);
                byteString += " ";
            }
            AssertEx.AreEqual("Advertisement bytes should be as expected", "BE AC 2F 23 44 54 CF 6D 4A 0F AD F2 F4 91 1B A9 FF A6 00 01 00 02 C5 00 ", byteString);
        }
        public void testBeaconAdvertisingBytes()
        {
            Context context = Application.Context;


            Beacon beacon = new Beacon.Builder()
                            .SetId1("0x454452e29735323d81c0")
                            .SetId2("0x060504030201")
                            .SetDataFields(new List <Java.Lang.Long> {
                new Java.Lang.Long(0x25L)
            })
                            .SetTxPower(-59)
                            .Build();
            // TODO: need to use something other than the d: prefix here for an internally generated field
            BeaconParser beaconParser = new BeaconParser()
                                        .SetBeaconLayout("s:0-1=0123,m:2-2=00,d:3-3,p:4-4,i:5-14,i:15-20");

            byte[]            data = beaconParser.GetBeaconAdvertisementData(beacon);
            BeaconTransmitter beaconTransmitter = new BeaconTransmitter(context, beaconParser);

            // TODO: can't actually start transmitter here because Robolectric does not support API 21

            AssertEx.AreEqual("Data should be 19 bytes long", 19, data.Length);
            String byteString = "";

            for (int i = 0; i < data.Length; i++)
            {
                byteString += String.Format("{0:x2}", data[i]);
                byteString += " ";
            }
            AssertEx.AreEqual("Advertisement bytes should be as expected", "00 25 C5 45 44 52 E2 97 35 32 3D 81 C0 06 05 04 03 02 01 ", byteString);
        }
        private BeaconTransmitter InitalizationTransmitter()
        {
            Context           context            = Android.App.Application.Context;
            BeaconTransmitter mBeaconTransmitter = new BeaconTransmitter(context, new BeaconParser().SetBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));

            return(mBeaconTransmitter);
        }
예제 #4
0
        public void TestBeaconAdvertisingBytesForEddystone()
        {
            Context context = Application.Context;

            Beacon beacon = new Beacon.Builder()
                            .SetId1("0x2f234454f4911ba9ffa6")
                            .SetId2("0x000000000001")
                            .SetManufacturer(0x0118)
                            .SetTxPower(-59)
                            .Build();
            BeaconParser beaconParser = new BeaconParser()
                                        .SetBeaconLayout("s:0-1=feaa,m:2-2=00,p:3-3:-41,i:4-13,i:14-19");

            byte[]            data = beaconParser.GetBeaconAdvertisementData(beacon);
            BeaconTransmitter beaconTransmitter = new BeaconTransmitter(context, beaconParser);
            // TODO: can't actually start transmitter here because Robolectric does not support API 21

            String byteString = "";

            for (int i = 0; i < data.Length; i++)
            {
                byteString += String.Format("{0:x2}", data[i]);
                byteString += " ";
            }

            AssertEx.AreEqual("Data should be 24 bytes long", 18, data.Length);
            AssertEx.AreEqual("Advertisement bytes should be as expected", "00 C5 2F 23 44 54 F4 91 1B A9 FF A6 00 00 00 00 00 01 ", byteString);
        }
예제 #5
0
        public void StartAdvertising(UserDataModel userData)
        {
            Beacon beacon = new Beacon.Builder()
                            .SetId1(AppConstants.iBeaconAppUuid)
                            .SetId2(userData.Major)
                            .SetId3(userData.Minor)
                            .SetTxPower(-59)
                            .SetManufacturer(AppConstants.CompanyCoreApple)
                            .Build();

            BeaconParser beaconParser = new BeaconParser().SetBeaconLayout(AppConstants.iBeaconFormat);

            _beaconTransmitter = new BeaconTransmitter(_mainActivity, beaconParser);
            _beaconTransmitter.StartAdvertising(beacon);
        }
        public void StartBroadcasting()
        {
            Context context = Android.App.Application.Context;

            beaconset.StopAdvertising();

            BeaconTransmitter mBeaconTransmitter = new BeaconTransmitter(context, new BeaconParser().SetBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
            Beacon            beacon             = new AltBeacon.Builder()
                                                   .SetId1("FDA50693-A4E2-4FB1-AFCF-C6EB07647825")
                                                   .SetId2("1010") //Major
                                                   .SetId3("2000") //Minor
                                                   .SetManufacturer(0x004C)
                                                   .SetTxPower(-59)
                                                   .Build();

            beaconset.StartAdvertising(beacon);
        }
예제 #7
0
        public void StartAdvertising()
        {
            Beacon beacon = new Beacon.Builder()
                            .SetId1(AppConstants.AppUUID)
                            .SetId2("2111")
                            .SetId3("3123")
                            .SetTxPower(-59)
                            .SetManufacturer(AppConstants.COMPANY_CODE_APPLE)
                            .Build();

            // iBeaconのバイト列フォーマットをBeaconParser(アドバタイズ時のバイト列定義)にセットする。
            BeaconParser beaconParser = new BeaconParser().SetBeaconLayout(AppConstants.IBEACON_FORMAT);

            // iBeaconの発信を開始する。
            _beaconTransmitter = new BeaconTransmitter(Application.Context, beaconParser);
            _beaconTransmitter.StartAdvertising(beacon);
        }
예제 #8
0
        public async void StartAdvertisingBeacons(UserDataModel userData)
        {
            await Task.Run(() =>
            {
                Beacon beacon = new Beacon.Builder()
                                .SetId1(AppConstants.iBeaconAppUuid)
                                .SetId2(userData.Major)
                                .SetId3(userData.Minor)
                                .SetTxPower(-59)
                                .SetManufacturer(AppConstants.CompanyCodeApple)
                                .Build();

                BeaconParser beaconParser = new BeaconParser().SetBeaconLayout(AppConstants.iBeaconFormat);

                _beaconTransmitter = new BeaconTransmitter(this, beaconParser);
                _beaconTransmitter.StartAdvertising(beacon);
            });
        }
        /// <summary>
        /// iBeacon発信開始処理(UUID、Major、Minorを直指定して発信)
        /// </summary>
        /// <param name="uuid">UUID</param>
        /// <param name="major">Major</param>
        /// <param name="minor">Minor</param>
        public void StartTransmission(Guid uuid, ushort major, ushort minor, sbyte txPower)
        {
            // Android用のビーコン定義を作成
            Beacon beacon = new Beacon.Builder()
                            .SetId1(uuid.ToString())
                            .SetId2(major.ToString())
                            .SetId3(minor.ToString())
                            .SetTxPower(txPower)
                            .SetManufacturer(Const.COMPANY_CODE_APPLE)
                            .Build();

            // iBeaconのバイト列フォーマットをBeaconParser(アドバタイズ時のバイト列定義)にセットする。
            BeaconParser beaconParser = new BeaconParser().SetBeaconLayout(IBEACON_FORMAT);

            // iBeaconの発信を開始する。
            _beaconTransmitter = new BeaconTransmitter(Android.App.Application.Context, beaconParser);
            _beaconTransmitter.StartAdvertising(beacon);
        }
예제 #10
0
        public void StartAdvertising(UserDataModel userData)
        {
            // TODO 出力調整どうするか考える。

            Beacon beacon = new Beacon.Builder()
                            .SetId1(AppConstants.iBeaconAppUuid)
                            .SetId2(userData.Major)
                            .SetId3(userData.Minor)
                            .SetTxPower(-59)
                            .SetManufacturer(AppConstants.CompanyCoreApple)
                            .Build();

            // iBeaconのバイト列フォーマットをBeaconParser(アドバタイズ時のバイト列定義)にセットする。
            BeaconParser beaconParser = new BeaconParser().SetBeaconLayout(AppConstants.iBeaconFormat);

            // iBeaconの発信を開始する。
            _beaconTransmitter = new BeaconTransmitter(_mainActivity, beaconParser);
            _beaconTransmitter.StartAdvertising(beacon);
        }
예제 #11
0
        public void StartAdvertising(UserData userData)
        {
            // TODO 出力調整どうするか考える。

            Beacon beacon = new Beacon.Builder()
                            .SetId1(AppConstants.AppUUID)
                            .SetId2(userData.Major)
                            .SetId3(userData.Minor)
                            .SetTxPower(-59)
                            .SetManufacturer(AppConstants.COMPANY_CODE_APPLE)
                            .Build();

            // iBeaconのバイト列フォーマットをBeaconParser(アドバタイズ時のバイト列定義)にセットする。
            BeaconParser beaconParser = new BeaconParser().SetBeaconLayout(AppConstants.IBEACON_FORMAT);

            // iBeaconの発信を開始する。
            _beaconTransmitter = new BeaconTransmitter(_mainActivity, beaconParser);
            _beaconTransmitter.StartAdvertising(beacon);
        }
예제 #12
0
        public async Task <bool> StartBroadcastingBle(Context context, Shoot ev)
        {
            //ask to turn on bluetooth:
            BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.DefaultAdapter;

            var allprefs = context.GetSharedPreferences(WhiteLabelConfig.BUILD_VARIANT.ToLower(), FileCreationMode.Private);
            //var prefs = allprefs.Edit();
            var useble = allprefs.GetBoolean("ble-" + ev.id, true);

            //prefs.PutInt("ble_enable", currentversion);
            //prefs.Apply();
            if (!useble)
            {
                return(false);
            }

            if (mBluetoothAdapter.State == State.Off)
            {
                //ask to turn on:
                TaskCompletionSource <bool> tcs = new TaskCompletionSource <bool>();
                var dialog = new Android.Support.V7.App.AlertDialog.Builder(context);
                dialog.SetTitle(Resource.String.enableble);
                dialog.SetMessage(Resource.String.blemessage);
                dialog.SetPositiveButton(Android.Resource.String.Yes, (o, e) =>
                {
                    tcs.SetResult(true);
                });

                dialog.SetNegativeButton(Android.Resource.String.No, (o, e) =>
                {
                    tcs.SetResult(false);
                });

                dialog.Show();

                var result = await tcs.Task;
                if (result)
                {
                    allprefs.Edit().PutBoolean("ble-" + ev.id, true).Apply();

                    //turn on ble
                    mBluetoothAdapter.Enable();
                    //need to wait for ble event saying its started here:
                    await Task.WhenAny(Task.Delay(3000), Task.Factory.StartNew(() =>
                    {
                        while (mBluetoothAdapter.State != State.On)
                        {
                            Task.Yield();
                        }
                    }));
                }
                else
                {
                    allprefs.Edit().PutBoolean("ble-" + ev.id, false).Apply();
                    return(false);
                }
            }

            var compat = BeaconTransmitter.CheckTransmissionSupported(context);

            if (compat == BeaconTransmitter.Supported)
            {
                try
                {
                    byte[] urlBytes = UrlBeaconUrlCompressor.Compress("https://" + WhiteLabelConfig.BEACONHOST + "/b/");// 91071");//+ev.offlinecode);
                    //HACK: remove line!
                    //ev.offlinecode = "91071";
                    List <byte> bytes = new List <byte>(urlBytes);
                    bytes.AddRange(Encoding.ASCII.GetBytes(ev.offlinecode));

                    urlBytes = bytes.ToArray();

                    Identifier        encodedUrlIdentifier = Identifier.FromBytes(urlBytes, 0, urlBytes.Length, false);
                    List <Identifier> identifiers          = new List <Identifier>();
                    identifiers.Add(encodedUrlIdentifier);
                    beacon = new Beacon.Builder()
                             .SetIdentifiers(identifiers)
                             .SetServiceUuid(0xfeaa)
                             .SetManufacturer(0x0118)
                             .SetBeaconTypeCode(0x10)
                             .SetTxPower(-59)
                             .Build();
                    BeaconParser beaconParser = new BeaconParser().SetBeaconLayout(BeaconParser.EddystoneUrlLayout);

                    beaconTransmitter = new BeaconTransmitter(context, beaconParser);

                    beaconTransmitter.StartAdvertising(beacon, this);
                }
                catch (MalformedURLException)
                {
                    Log.Debug("BOOTLEGGER", "That URL cannot be parsed");
                }
                return(true);
            }
            else
            {
                //not supported
                return(false);
            }
        }
        /// <summary>
        /// 端末がBLEの発信に対応しているかどうかをチェックする処理
        /// </summary>
        /// <returns><c>true</c>, 発信可能, <c>false</c> 発信不可</returns>
        public bool TransmissionSupported()
        {
            int checkResult = BeaconTransmitter.CheckTransmissionSupported(Android.App.Application.Context);

            return(checkResult == BeaconTransmitter.Supported);
        }