2

私は cwac-locpoll を使用していますが、これは素晴らしい仕事をしています。ただし、一部のユーザーは次の問題を抱えています

java.lang.RuntimeException: WakeLock under-locked com.commonsware.cwac.locpoll.LocationPoller
at android.os.PowerManager$WakeLock.release(PowerManager.java:339)
at android.os.PowerManager$WakeLock.release(PowerManager.java:299)
at com.commonsware.cwac.locpoll.WakefulThread.onPostExecute(WakefulThread.java:59)
at com.commonsware.cwac.locpoll.LocationPollerService$PollerThread.onPostExecute(LocationPollerService.java:231)
at com.commonsware.cwac.locpoll.WakefulThread.run(WakefulThread.java:93)

LocationReceiverご覧のとおり、取得した場所をヘルパー クラスを介してアプリに保存するだけのクラスSharedPreferencesです。

public class LocationReceiver extends BroadcastReceiver {
    private static final String TAG = "LocationReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
    Bundle b = intent.getExtras();
        Location loc = (Location) b.get(LocationPoller.EXTRA_LOCATION);

        if (loc == null) {
            loc = (Location) b.get(LocationPoller.EXTRA_LASTKNOWN);

            if (loc == null) {
                Log.w(TAG, "Unable to get location. " + intent.getStringExtra(LocationPoller.EXTRA_ERROR));
            } else {
                Log.w(TAG, "Timeout getting location, using previous one " + loc);
            }
        } else {
            Log.i(TAG, "Got location " + loc);
        }

        // save location in preferences
        if (loc != null) {
            PrefsHelper.setLastLocation(loc.getLatitude(), loc.getLongitude());
        }
    }
}

WakefulIntentServiceまた、この最後の場所をフェッチして何かを行う別の cwac-wakeful も使用していますが、これらは独立して実行するように設計されています。言い換えると:

  1. LocationReceivercwac-locpoll によって呼び出され、最後の既知の場所をときどき保存しSharedPreferencesます。
  2. AWakefulIntentServiceは (独立して) この場所を取得し、それを使用して何かを行うようにスケジュールされています。

ありがとう!

4

1 に答える 1

1

BroadcastReceiverおそらく、これはあなたの とは関係ありません。Android がサービスを削除して後で元に戻すなど、エッジ ケースをより適切に処理WakefulIntentServiceするために、最近のいくつかの変更をリップルする必要があります。LocationPoller

私はこれに関するイシューを提出しました -- 修正がいつリリースされるかについては、そのイシューを追跡してください。このコンポーネントの性質上、長期にわたるテストを行う必要があるため、パッチをリリースするには少なくとも 24 時間はかかるでしょう。

于 2012-05-04T13:31:56.327 に答える