0

Github リポジトリのAltbeacon( ) が提供する基本的なサンプル アプリケーションを使用しました。Radio Network

私のiBeaconではすべてがフォアグラウンドでのみ機能MonitoringするようですRanging

フォアグラウンドで動作させるために、次の手順を実行しました。

public class BeaconReferenceApplication extends Application implements BootstrapNotifier, RangeNotifier
{

private static final String TAG = "BeaconReferenceApplication";
private BeaconManager mBeaconManager;
private Region mAllBeaconsRegion;
private BackgroundPowerSaver mBackgroundPowerSaver;
private RegionBootstrap mRegionBootstrap;
private BackgroundPowerSaver backgroundPowerSaver;

@Override
public void onCreate()
{
    mAllBeaconsRegion = new Region(getPackageName(), null, null, null);

    mBeaconManager = BeaconManager.getInstanceForApplication(this);
    mBackgroundPowerSaver = new BackgroundPowerSaver(this);
    mRegionBootstrap = new RegionBootstrap(this, mAllBeaconsRegion);
    mBeaconManager.getBeaconParsers().add(new BeaconParser().setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24"));
    backgroundPowerSaver = new BackgroundPowerSaver(this);
}

@Override
public void didRangeBeaconsInRegion(Collection<Beacon> arg0, Region arg1)
{
    System.out.println("app-> didRangeBeaconsInRegion");
}

@Override
public void didDetermineStateForRegion(int arg0, Region arg1)
{
    System.out.println("app-> didDetermineStateForRegion");
}

@Override
public void didEnterRegion(Region arg0)
{
    System.out.println("app-> didEnterRegion");
    try
    {
        Log.d(TAG, "entered region.  starting ranging");
        mBeaconManager.setRangeNotifier(this);
        mBeaconManager.startRangingBeaconsInRegion(mAllBeaconsRegion);
    }
    catch(RemoteException e)
    {
        Log.e(TAG, "Cannot start ranging");
    }

    Intent intentMainActivity = new Intent(this,MonitoringAndRangingActivity.class);
    intentMainActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intentMainActivity);
}

@Override
public void didExitRegion(Region arg0)
{
    System.out.println("app-> didExitRegion");
}

public void setMonitoringAndRangingActivity(MonitoringAndRangingActivity activity)
{
    mBeaconManager.setBackgroundMode((activity==null)?true:false);
}

}

Edit:メソッドを追加しましたmBeaconManager.setBackgroundMode(true);が、助けはありません。stopLE scan() メッセージを受け取るだけでBlutoothAdapter、すべてが停止します。これをサービスなどに実装する必要がありますか?

しかし、バックグラウンドに移動するとすぐに(戻るかホームに戻る)、ログとcallback methods応答が停止します。バックグラウンド iBeacon 検出を有効にするために不足しているものはありますか。

どんな入力も恩恵のようなものです。

4

1 に答える 1

7

を使用している場合はBackgroundPowerSaver、Android ビーコン ライブラリが自動的にバックグラウンド モードに移行します。setBackgroundMode手動で呼び出す必要はありません。

ライブラリがバックグラウンド モードの場合、電力を節約するために 5 分ごとにスキャンを実行するだけなので (このタイミングは構成可能です)、ビーコンの検出に最大 5 分かかる場合があります。aspp がバックグラウンドにある間、LogCat を 5 分間監視し、その間に検出が行われるかどうかを確認します。そうでない場合は、質問に LogCat の抜粋を追加すると役立ちます。

于 2014-09-18T08:53:25.513 に答える