我使用android信标库让应用程序在后台运行,让应用程序扫描ibeacons,即使用户进入任务切换器并在屏幕上滑动应用程序。
信标库在这里:
https://altbeacon.github.io/android-beacon-library/index.html
我使用的代码: 用于搜索ibeacons的 MonitoringActivity :
public MonitoringActivity() {
}
private RegionBootstrap regionBootstrap;
private BeaconManager beaconManager;
private BackgroundPowerSaver backgroundPowerSaver;
@Override
public void onCreate() {
super.onCreate();
Log.d("Beacon app", "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("UniqueId", null, null, null);
regionBootstrap = new RegionBootstrap(this, region);
//Changing between scan periode
backgroundPowerSaver= new BackgroundPowerSaver(this);
//beaconManager.setBackgroundScanPeriod(5000l);
//beaconManager.setBackgroundBetweenScanPeriod(10000l);
}
@Override
public void didDetermineStateForRegion(int arg0, Region arg1) {
// TODO Auto-generated method stub
}
@Override
public void didEnterRegion(Region arg0) {
// TODO Auto-generated method stub
Log.v("Beacon entry ", "beacon entred to range");
Intent intent = new Intent(MonitoringActivity.this, MonitoringActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
结果的RangActivity :
public class RangActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rang);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.rang, menu);
return true;
}
和清单的代码:
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<application
android:name=".MonitoringActivity"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:persistent="true"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:launchMode="singleInstance" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MonitoringActivity"
android:label="@string/title_activity_monitoring" >
</activity>
<activity
android:name=".RangActivity"
android:label="@string/title_activity_rang"
>
</activity>
</application>
我的问题是,只有当我按下后退按钮直到它退出或主页按钮时应用程序才能工作但是如果我去任务切换器并从屏幕上滑动应用程序它不再运行了。我该如何解决这个问题?
答案 0 :(得分:0)
从任务切换器中杀死应用程序将关闭应用程序以使其无法运行,从而阻止其检测到信标(至少暂时一段时间)。该库旨在重新启动下一次电源连接/断开事件。因此,出于测试目的,只需将手机连接到充电器或计算机的USB端口即可。
您可以在此处详细了解此限制:http://altbeacon.github.io/android-beacon-library/resume-after-terminate.html
编辑:在某些设备上,人们报告说,在使用任务切换器查杀应用后,ACTION_POWER_CONNECTED事件无效。您可以在此处看到有关此问题的讨论:https://github.com/AltBeacon/android-beacon-library/issues/44 < / p>
我创建了一个测试应用here,以确定此问题是否适用于您的特定设备。如果您可以在设备上安装该测试应用并按照说明操作,则应该知道您的设备是否受到影响。请报告您的结果!