2016-04-05 15 views
0

と私の英語のために申し訳ありません。 私はiBeaconを使っています。そのためには、Android Beacon Libraryを使用しています。 これは素晴らしいことですが、完璧に動作しますが、今私はあなたの助けが必要です。カスタムサービスとAltBeacon

特定のiBeaconが領域に入ると情報を開始して送信するスレッドがあり、iBeaconが領域を離れると停止します。 問題は、私はアプリを殺すと、スレッドが死ぬことです。 私はサービスについて考えていますが、BootstrapNotifierを使用することは別のカスタムサービスを使用することは不可能です。

このタスクを達成する方法についてご意見はありますか? ご提案いただきありがとうございます。

答えて

1

私は別の方法で解決しました。 私は自分のカスタムサービスを使用しており、アプリケーション内にBootstrapNotifierを実装していません。

誰かが必要な場合はここに私のコードです。

public class BeaconDetector extends Service implements BeaconConsumer { 

private static final String TAG = "BeaconDetector"; 

private BeaconUtility.BeaconObject beaconObject; 

private Context getServiceCtx(){ 
    return BeaconDetector.this; 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
    IMLog.e(TAG, "Created."); 
} 

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

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    IMLog.e(TAG, "Start."); 

    beaconObject = BeaconUtility.instantiateBeaconManager(this); 
    beaconObject.beaconManager.bind(this); 

    return START_STICKY; 
} 

@Override 
public void onDestroy() { 
    IMLog.e(TAG, "Destroy."); 
    beaconObject.beaconManager.unbind(this); 
} 


@Override 
public void onBeaconServiceConnect() { 
    IMLog.e(TAG, "Connected."); 

    beaconObject.beaconManager.setMonitorNotifier(new MonitorNotifier() { 
     @Override 
     public void didEnterRegion(Region arg0) { 
      // In this example, this class sends a notification to the user whenever a Beacon 
      // matching a Region (defined above) are first seen. 
      IMLog.e(TAG, "did enter region."); 
      Sender.getInstance(getServiceCtx()).startSender(); 
     } 

     @Override 
     public void didExitRegion(Region region) { 
      IMLog.e(TAG, "did exit region."); 
      if (Sender.getInstance(getServiceCtx()).isAlive()) { 
       Sender.getInstance(getServiceCtx()).stopSender(); 
      } 
     } 

     @Override 
     public void didDetermineStateForRegion(int state, Region region) { 
      IMLog.e(TAG, "did enter region."); 
     } 
    }); 

    try { 
     beaconObject.beaconManager.startMonitoringBeaconsInRegion(BeaconUtility.getMonitoringRegion()); 
    } catch (RemoteException e) { 
     IMLog.e(TAG, "Remote Exception."); 
    } 

} 

}

+0

あなたはそれを解決うれしいです!これはRegionBootstrapを使うよりも良いアプローチです。これは本当に 'Application'クラスで使うように設計されています。 – davidgyoung

関連する問題