2017-05-12 7 views
0
私は サービスクラスを拡張するクラスでライブラリalbeacon と私のビーコンをスキャンしています

altbeacon

public class BeaconActivity extends Service implements BeaconConsumer{} 

私の質問は以下のとおりです。

の1-どこ/停止を開始しますこのサービス?私はアプリのスキャンをしたい場合

startService(new Intent(getApplicationContext(), BeaconActivity.class)); 
stopService(new Intent(getApplicationContext(), BeaconActivity.class)); 

2 - すべての時間は、私はいくつかのボタンを使用して、このサービスを停止/起動することはできますか?

スタートボタンが

...アプリ開始スキャンを押したとき、これは私のクラスである:

public class BeaconActivity extends Service implements BeaconConsumer { 

BeaconManager beaconManager; 
private static final String UUID1 = "B9407F30-F5F8-466E-AFF9-25556B57FE6D"; 
private static final String Major1 = "14152"; 
public static boolean isInBeaconRegion =false; 
int value, id,distance; 
String beaconMinor; 


public void onCreate() { 
    super.onCreate(); 


    beaconManager = BeaconManager.getInstanceForApplication(this); 
    beaconManager.getBeaconParsers().clear(); 
    beaconManager.getBeaconParsers().add(new BeaconParser(). 
      setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24")); 

    // 5 seconds 
    beaconManager.setBackgroundBetweenScanPeriod(8000l); 
    beaconManager.setForegroundBetweenScanPeriod(8000l); 

    beaconManager.bind(this); } 

@Nullable 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    // -- continue running until it is stopped -- 
    Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show(); 
    return START_STICKY; } 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show(); } 

@Override 
public void onBeaconServiceConnect() { 

    beaconManager.addRangeNotifier(new RangeNotifier() { 
     @Override 
     public void didRangeBeaconsInRegion(Collection<Beacon> collection, Region region) { 
      for (int i = 0; i < collection.size(); i++) { 

       final Beacon beacon = collection.iterator().next(); 

       // -- Get Beacon UUID -- 
       String UUID2 = beacon.getId1().toString().toUpperCase(); 
       // -- Get Beacon Minor -- 
       String Major2 = beacon.getId2().toString(); 

       if (UUID2.equals(UUID1) && Major2.equals(Major1)) { 

        // -- Get Beacon Minor -- 
        beaconMinor = beacon.getId3().toString(); 
        //Check the minor 

       } } } 

    }); 

    try { 
     beaconManager.startRangingBeaconsInRegion(new Region("B9407F30-F5F8-466E-AFF9-25556B57FE6D", null, null, null)); 
    } catch (RemoteException e) { 
    } } 

答えて

0

いくつかのヒント:

  1. Android Beacon Libraryはすでに簡単にスキャンして処理を行い、独自のサービスを提供していますすべての時間をスキャンすることができます。これを設定する方法がわかりますhere.その結果、独自のスキャンサービスを作ることは絶対必要ではありません。

  2. 独自のサービスを作成したいならば、あなたが起動し、このようなボタンの内側にそれを停止することができますが:

    private boolean mServiceStarted = false; 
    public View.OnClickListener startButtonTapped = new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         if (!mServiceStarted) { 
          Intent intent = new Intent(getApplicationContext(), BeaconActivity.class); 
          startService(intent); 
          mServiceStarted = true; 
         } 
        } 
    }; 
    public View.OnClickListener stopButtonTapped = new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         if (mServiceStarted) { 
          Intent intent = new Intent(getApplicationContext(), BeaconActivity.class); 
          stopService(intent); 
          mServiceStarted = false; 
         } 
        } 
    }; 
    
  3. あなたはBeaconScanningService」のようなものにクラス「BeaconActivityを」名前を変更することもできます"これは、Androidサービスクラスにこのような名前を付けることが標準的な慣習であるためです。

+0

です。しかし、ユーザーが(スキャン開始)を押して、彼の周りにビーコンがいなければどうでしょうか?この警告をどこに置くことができますか? - 私のクラスが添付されています – Abrar

関連する問題