我正在使用Android Beacon Library 2.0,我对信标后台服务有一个奇怪的问题。我至少手动启动我的应用程序一次,关闭设备并重新启动。如果我转到正在运行的应用程序/服务列表,我会看到我的应用程序的名称(1个进程,1个服务),但几秒后它就会从列表中消失,因为它已从Android中消失。有时候在2或3分钟后它会再次出现,但几秒后它会消失。 此行为不是"规则",有时服务运行没有问题并保持活动状态。
这是我的清单:
<uses-sdk
android:minSdkVersion="17"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<application
android:allowBackup="true"
android:icon="@drawable/my_drawable"
android:label="MyApp"
android:theme="@android:style/Theme.Holo"
android:name="BeaconReferenceApplication">
<activity
android:name="org.altbeacon.beaconreference.MonitoringActivity"
android:theme="@android:style/Theme.Holo"
android:label="MyApp" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="org.altbeacon.beaconreference.RangingActivity"
android:theme="@android:style/Theme.Holo"
android:label="MyApp" >
<intent-filter>
</intent-filter>
</activity>
对于测试我使用三星Galaxy tab3(Android 4.4.2)和三星Galaxy tab4(Android 4.4.2)
我试图检查logcat消息,这些行可能可以解释一些事情。
E / BeaconManager(4802):无法联系服务以设置扫描周期
D / BeaconManager(4802):此消费者未受约束。捆绑: org.altbeacon.beaconreference.BeaconReferenceApplication@42320918
D / BeaconManager(4802):消费者计数现在为:1
V / ApplicationPolicy(2365):isApplicationStateBlocked userId 0 pkgname org.altbeacon.beaconreference
D / CustomFrequencyManagerService(2365):acquireDVFSLockLocked:type: DVFS_MIN_LIMIT频率:1400000 uid:1000 pid:2365 pkgName: ACTIVITY_RESUME_BOOSTER @ 5
W / ActivityManager(2365):mDVFSHelper.acquire()
D / PhoneStatusBar(2551):setTransGradationMode = false, mTransparentMode = false,mSemiTransparentMode = false, mMultiWindowMode =假
W / ResourceType(2365):获取值时没有已知的包 资源号0x7f020000
D / StatusBarManagerService(2365):tr p:2365,o:f
W / WindowManager(2365):令牌{432ad010 ActivityRecord {432ace98 u0 org.altbeacon.beaconreference / .MonitoringActivity t3}}创建失败 开始窗口
W / WindowManager(2365): android.content.res.Resources $ NotFoundException:资源ID#0x7f020000
W / WindowManager(2365):at android.content.res.Resources.getValue(Resources.java:2354)
W / WindowManager(2365):at android.content.res.Resources.getDrawable(Resources.java:1919)
W / WindowManager(2365):at com.android.internal.widget.ActionBarView.setIcon(ActionBarView.java:1037)
W / WindowManager(2365):at com.android.internal.policy.impl.PhoneWindow.installDecor(PhoneWindow.java:3478)
W / WindowManager(2365):at com.android.internal.policy.impl.PhoneWindow.getDecorView(PhoneWindow.java:1886)
W / WindowManager(2365):at com.android.internal.policy.impl.PhoneWindowManager.addStartingWindow(PhoneWindowManager.java:2639)
W / WindowManager(2365):at com.android.server.wm.WindowManagerService $ H.handleMessage(WindowManagerService.java:9140)
W / WindowManager(2365):at android.os.Handler.dispatchMessage(Handler.java:102)
W / WindowManager(2365):在android.os.Looper.loop(Looper.java:146)W / WindowManager(2365):at adroid.os.HandlerThread.run(HandlerThread.java:61)
D / PointerIcon(2365):setMouseIconStyle1 pointerType:1001iconType:101 标志:0
D / PointerIcon(2365):setMouseCustomIcon IconType相同.101
I / BeaconService(4802):beaconService版本2.0-samsung1正在启动 达
I / BeaconService(4802):SDK为18或更高版本。使用原生Android 用于BLE扫描的API
D / PhoneStatusBar(2551):setTransGradationMode = false, mTransparentMode = false,mSemiTransparentMode = false, mMultiWindowMode =假
W / ResourceType(2365):获取值时没有已知的包 资源号0x7f020000
W / WindowManager(2365):Token {4335a9f8 ActivityRecord {4335a880 u0 org.altbeacon.beaconreference / .RangingActivity t3}}创建失败 开始窗口
W / WindowManager(2365): android.content.res.Resources $ NotFoundException:资源ID#0x7f020000
W / WindowManager(2365):at android.content.res.Resources.getValue(Resources.java:2354)
W / WindowManager(2365):at android.content.res.Resources.getDrawable(Resources.java:1919)
W / WindowManager(2365):at com.android.internal.widget.ActionBarView.setIcon(ActionBarView.java:1037)
W / WindowManager(2365):at com.android.internal.policy.impl.PhoneWindow.installDecor(PhoneWindow.java:3478)
W / WindowManager(2365):at com.android.internal.policy.impl.PhoneWindow.getDecorView(PhoneWindow.java:1886)
W / WindowManager(2365):at com.android.internal.policy.impl.PhoneWindowManager.addStartingWindow(PhoneWindowManager.java:2639)
W / WindowManager(2365):at com.android.server.wm.WindowManagerService $ H.handleMessage(WindowManagerService.java:9140)
W / WindowManager(2365):at android.os.Handler.dispatchMessage(Handler.java:102)
W / WindowManager(2365):在android.os.Looper.loop(Looper.java:146)W / WindowManager(2365):在android.os.HandlerThread.run(HandlerThread.java:61)
D / BtGatt.GattService(3581):onScanResult() - 地址= F4:B8:5E:E4:BA:4A,rssi = -53
D / BtGatt.GattService(3581):Binder已经死了 - 取消注册客户端 (5)!E / BtGatt.GattService(3581):异常:android.os.DeadObjectException
W / InputDispatcher(2365):channel~消费者关闭输入通道或 发生错误。事件= 0x9
I / WindowState(2365):胜利死亡:窗口{43379c08 u0 org.altbeacon.beaconreference / org.altbeacon.beaconreference.RangingActivity}
E / InputDispatcher(2365):频道〜频道无法恢复 并将被处置!
W / InputDispatcher(2365):尝试取消注册已取消注册 输入频道
I / WindowState(2365):WIN DEATH:Window {43366f58 u0 org.altbeacon.beaconreference / org.altbeacon.beaconreference.MonitoringActivity}
我的应用程序正确检测到范围内的所有信标,但我需要一个有效的后台服务才能长时间工作。 你能告诉我我做错了吗?
修改
我可以假设,如果我看到应用程序使用&#34; 1进程和1个服务&#34;在运行程序列表中,该服务处于活动状态并正在运行,如果我看不到该进程未运行?
答案 0 :(得分:0)
根据我的理解,我正在考虑使用Beacons概念开发的任何应用程序。
我将运行我的服务,直到我的活动在后台运行。当我的应用程序被用户清除时,我将停止扫描所有信标。 我的意见是只有当有限的活动正在运行时运行服务或者只是停止服务。这也会对设备电池产生影响。
要将服务绑定到活动,您可以查看here。
希望它会有所帮助。