0

次のコードを使用して、バックグラウンドで iBeacon を監視する Android ビーコン ライブラリを実験しています。

public class IBeaconBootstrap extends Application implements BootstrapNotifier {

private RegionBootstrap regionBootstrap;

@Override
public void onCreate() {

   super.onCreate();

   Log.d("IBeaconBootstrap", "App started up");

   // wake up the app when any beacon is seen (you can specify specific id
   // filers in the parameters below)

   Region region = new Region("MyRegion", null, null, null);
   regionBootstrap = new RegionBootstrap(this, region);

   // This is for Apple compatible iBeacons
   BeaconManager.getInstanceForApplication(this).getBeaconParsers().add(new     BeaconParser().setBeaconLayout("m:0-3=4c000215,i:4-19,i:20-21,i:22-23,p:24-24"));
}

@Override
public void didDetermineStateForRegion(int state, Region region) {

   Log.d("Boostrap didDetermineStateForRegion", "Region " + region.toString());
}

@Override
public void didEnterRegion(Region region) {

   Log.d("Boostrap didEnterRegion", "Got a didEnterRegion call");

   intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   this.startActivity(intent);
}

@Override
public void didExitRegion(Region region) {

   Log.d("Boostrap didExitRegion", "Got a didExitRegion call");
}
}

アプリが実行されている場合は iBeacon を検出するとフォアグラウンドになりますが、アプリが実行されていない場合は何も起こりません。これは予期された動作ですか、それともアプリが実行されていない場合でも起動するはずですか?

4

1 に答える 1

3

おそらく、「アプリが実行されていません」という意味を明確にする必要があります。つまり:

  1. アプリはインストールされていますが、起動されていません
  2. アプリは一度起動しましたが、再起動してから
  3. アプリはタスク スイッチャーから強制終了されました

上記のコードを使用すると、それぞれの場合に予想される動作は次のとおりです。

  1. アプリは実行されず、アクティビティを自動起動できません。
  2. アプリは、起動後に定期的にビーコンのスキャンを開始し、ビーコンが検出されるとアクティビティを起動します。
  3. 充電器の接続/切断または再起動するまで、アプリは実行されず、自動起動できません。その後の動作は(2)のとおりです。このケースの詳細については、こちらをご覧ください。

アクティビティが表示されていない場合、ライブラリは 5 分ごとにビーコンのスキャン tyo 検索のみを行うため、検出に時間がかかる可能性があることに注意してください。この間隔は完全に構成可能です。

(3)の制限は Android OS によるものです。ユーザーによって強制終了されたアプリの再起動を許可するイベントが発生する必要があります。

于 2014-08-20T11:39:11.490 に答える