4

Android Beacon Library 2.0を使用していますが、ビーコン バックグラウンド サービスに奇妙な問題があります。アプリを手動で少なくとも 1 回起動し、デバイスの電源を切って再起動します。実行中のアプリ/サービスのリストに移動すると、アプリの名前 (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>

テストには、Samsung Galaxy tab3 (Android 4.4.2) と Samsung 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: タイプ: 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=false

W/ResourceType(2365): リソース番号 0x7f020000 の値を取得するときに既知のパッケージがありません

D/StatusBarManagerService( 2365): tr p:2365,o:f

W/WindowManager(2365): Token{432ad010 ActivityRecord{432ace98 u0 org.altbeacon.beaconreference/.MonitoringActivity t3}} が開始ウィンドウの作成に失敗しました

W/WindowManager(2365): android.content.res.Resources$NotFoundException: リソース ID #0x7f020000

W/WindowManager(2365): android.content.res.Resources.getValue(Resources.java:2354) で

W/WindowManager(2365): android.content.res.Resources.getDrawable(Resources.java:1919) で

W/WindowManager(2365): com.android.internal.widget.ActionBarView.setIcon(ActionBarView.java:1037) で

W/WindowManager(2365): com.android.internal.policy.impl.PhoneWindow.installDecor(PhoneWindow.java:3478) で

W/WindowManager(2365): com.android.internal.policy.impl.PhoneWindow.getDecorView(PhoneWindow.java:1886) で

W/WindowManager(2365): com.android.internal.policy.impl.PhoneWindowManager.addStartingWindow(PhoneWindowManager.java:2639)

W/WindowManager(2365): com.android.server.wm.WindowManagerService$H.handleMessage(WindowManagerService.java:9140) で

W/WindowManager(2365): android.os.Handler.dispatchMessage(Handler.java:102) で

W/WindowManager(2365): android.os.Looper.loop(Looper.java:146)

W/WindowManager(2365): adroid.os.HandlerThread.run(HandlerThread.java:61) で

D/PointerIcon( 2365): setMouseIconStyle1 pointerType: 1001iconType:101 flag:0

D/PointerIcon( 2365): setMouseCustomIcon IconType は same.101

I/BeaconService( 4802): beaconService バージョン 2.0-samsung1 が起動しています

I/BeaconService( 4802): SDK は 18 以上です。BLE スキャン用のネイティブ Android API の使用


D/PhoneStatusBar( 2551): setTransGradationMode=false、mTransparentMode=false、mSemiTransparentMode=false、mMultiWindowMode=false

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): android.content.res.Resources.getValue(Resources.java:2354) で

W/WindowManager(2365): android.content.res.Resources.getDrawable(Resources.java:1919) で

W/WindowManager(2365): com.android.internal.widget.ActionBarView.setIcon(ActionBarView.java:1037) で

W/WindowManager(2365): com.android.internal.policy.impl.PhoneWindow.installDecor(PhoneWindow.java:3478) で

W/WindowManager(2365): com.android.internal.policy.impl.PhoneWindow.getDecorView(PhoneWindow.java:1886) で

W/WindowManager(2365): com.android.internal.policy.impl.PhoneWindowManager.addStartingWindow(PhoneWindowManager.java:2639)

W/WindowManager(2365): com.android.server.wm.WindowManagerService$H.handleMessage(WindowManagerService.java:9140) で

W/WindowManager(2365): 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): バインダーが停止しています - クライアントの登録を解除しています (5)!

E/BtGatt.GattService(3581): 例外: android.os.DeadObjectException

W/InputDispatcher( 2365): チャネル ~ コンシューマーが入力チャネルを閉じたか、エラーが発生しました。イベント=0x9

I/WindowState(2365): WIN DEATH: Window{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}

私のアプリは範囲内のすべてのビーコンを正しく検出しますが、長時間動作させるにはバックグラウンド サービスが必要です。私が間違っていることを教えてください。

編集
「1プロセスと1サービス」のアプリケーションが実行中のプログラムのリストにある場合、サービスはアクティブで実行中であり、表示されない場合はプロセスが実行されていないと想定できますか?

4

1 に答える 1

0

私の理解では、ビーコンの概念を使用して開発するアプリケーションはどれでもよいと考えています。

アクティビティがバックグラウンドで実行されるまでサービスを実行します。アプリケーションがユーザーによってクリアされると、すべてのビーコンのスキャンを停止します。私の意見では、サービスにバインドされているアクティビティが実行されている場合にのみサービスを実行するか、サービスを停止するだけです。これは、デバイスのバッテリーにも影響します。

サービスをアクティビティにバインドするには、こちらをご覧ください。

それが役立つことを願っています。

于 2015-09-08T08:15:58.967 に答える