入力した地域に自分のアプリを表示するのに問題があり、サンプルhereに従っています。 私がActivtyにBeaconManagerをbind
しても動作しませんが、私が行ったとき、私はアプリケーションからのアクティビティからログを取得し、アプリケーションは表示されませんが表示されません。ビーコンマネージャがバインドされているときにバックグラウンドでアプリを起動する
バックグラウンドでアプリケーションを起動するためにクラスextends Application implements BootstrapNotifier
を使用できますか?モニタ/レンジングを処理するクラスextends AppCompatActivity implements BeaconConsumer
を使用することができますか?または、アプリケーションクラス内のすべてを処理する必要がありますか?打ち上げ?
(不正なコードブロックのため申し訳ありませんが、私は正しく、このstackoverflowのコードの事を処理することはできません)
public class BeaconActivity extends AppCompatActivity implements BeaconConsumer {
protected final String TAG = "BeaconActivity";
private BeaconManager beaconManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate()");
setContentView(R.layout.activity_beacon);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
RangedBeacon.setSampleExpirationMilliseconds(8000);
beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.bind(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "Unbind Beaconmanager");
beaconManager.unbind(this);
}
@Override
public void onBeaconServiceConnect() {
beaconManager.setMonitorNotifier(new MonitorNotifier() {
@Override
public void didEnterRegion(final Region region) {
Log.d(TAG, "Enter Region identifier: " + region.getId1() + ", " + region.getId2() + ", " + region.getId3());
}
@Override
public void didExitRegion(final Region region) {
Log.d(TAG, "Exit Region identifier: " + region.getId1() + ", " + region.getId2() + ", " + region.getId3());
}
@Override
public void didDetermineStateForRegion(int state, Region region) {
}
});
beaconManager.setRangeNotifier(new RangeNotifier() {
@Override
public void didRangeBeaconsInRegion(Collection<Beacon> beacons, Region region) {
for (final Beacon beacon : beacons) {
final String distance = new DecimalFormat("##.######").format(beacon.getDistance());
Log.d(TAG, "Distance: " + distance + ". This beacon has identifiers:" + beacon.getId1() + ", " + beacon.getId2() + ", " + beacon.getId3());
}
}
});
try {
Region region = new Region("all", null, null, null);
beaconManager.startMonitoringBeaconsInRegion(all);
beaconManager.startRangingBeaconsInRegion(all);
} catch (RemoteException e) {
}
}
}
public class BeaconApplication extends Application implements BootstrapNotifier {
private static final String TAG = "BeaconApplication";
private RegionBootstrap regionBootstrap;
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "App started up");
BeaconManager beaconManager = BeaconManager.getInstanceForApplication(this);
beaconManager.getBeaconParsers().add(new BeaconParser().
setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25"));
Region all = new Region("all", null, null, null);
regionBootstrap = new RegionBootstrap(this, all);
}
@Override
public void didEnterRegion(Region region) {
Log.d(TAG, "Enter region " + region.getUniqueId());
// regionBootstrap.disable();
Intent intent = new Intent(this, BeaconActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);
}
@Override
public void didExitRegion(Region region) {
Log.d(TAG, "Exit region " + region.getUniqueId());
}
@Override
public void didDetermineStateForRegion(int i, Region region) {
}
}
編集: 私はほんの少しを台無しかもしれないと思います。説明しましたhereアプリが殺された場合にのみ起動します(タスクスイッチャーではなくなりました)。タスクスイッチャーで使用できる場合は、バックグラウンドで着信イベントを処理するだけで、アクティビティログを取得できます。
「アクティビティでのバインディングがバックグラウンドの起動に失敗するため」という意味を説明できますか? – davidgyoung
私は 'beaconManager.bind(this);'を呼び出すと思ったが、BeaconActivityでは、BeaconApplicationからのバックグラウンドの起動はもはや動作しない。しかし、なぜ私は今なぜ知っていると思います(編集を参照)。 BeaconManagerをアクティビティにバインドしても、アプリケーションクラスにまったく影響しないことを確認できますか? – Zuop
アプリケーションクラスには影響しません。それがRangingActivityが参照アプリケーションでどのように動作するかです:https://github.com/AltBeacon/android-beacon-library-reference/blob/master/app/src/main/java/org/altbeacon/beaconreference/RangingActivity.java – davidgyoung