0

私はあなたのライブラリにリンクされていました(もう一度、ありがとう、そして素晴らしい仕事です)。

過去 2 時間、何が問題なのかを試してみましたが、失敗しました。

ログイン画面コードの AlarmManager は次のとおりです。

Intent i = new Intent(con, LocationPoller.class);
                i.putExtra(LocationPoller.EXTRA_INTENT, new Intent(con,
                        LocationReceiver.class));
                i.putExtra(LocationPoller.EXTRA_PROVIDER,
                        LocationManager.NETWORK_PROVIDER);

                gps = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

                PendingIntent pi = PendingIntent.getBroadcast(con, 0, i, PendingIntent.FLAG_NO_CREATE);
                gps.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(),
                        10 * 1000, pi);
                Log.d("Service: ",
                        "GPS Service started and scheduled with AlarmManager");

これが私が自分で作成したクラスです(あなたのデモのものではありませんが、似ています):

public class LocationReceiver extends BroadcastReceiver
{

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

        String msg;

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

            if (loc == null)
            {
                msg = intent.getStringExtra(LocationPoller.EXTRA_ERROR);
            }
            else
            {
                msg = "TIMEOUT, lastKnown=" + loc.toString();
            }
        }
        else
        {
            msg = loc.toString();
        }

        if (msg == null)
        {
            msg = "Invalid broadcast received!";
        }

        Log.d("GPS Broadcast: ", "Location: " + msg);
    }

}

何も起こっていません。logcatに情報がまったく表示されないため、これを想定しています。さらに、PollerThread (それが正しい用語であれば) は、デバッグ ビューを見ると、あたかも何かを待っているがブロードキャストを送信していないかのように積み重なっていきます。

私は何を間違っていますか?ネットワーク経由で位置を確認するのにそれほど時間はかからないはずですか? それが問題だったとしても、私はいくつかのフィードバックを得るべきでした..

私のマニフェストのアプリケーションタグのエントリは次のとおりです。

<receiver android:name="com.commonsware.cwac.locpoll.LocationPoller" />
        <receiver android:name=".LocationReceiver" />
        <service android:name="com.commonsware.cwac.locpoll.LocationPollerService" />
4

1 に答える 1

1

LocationPollerポーリング期間がはるかに長くなるように設計されています: 10 秒ではなく 1 時間です。私はこれほど頻繁なポーリング期間でテストしたことはありませんし、2 分より短いポーリング期間LocationPollerをサポートするつもりもありません。LocationPollerDEFAULT_TIMEOUT

LocationPollerしたがって、最初にすべきことは、そもそもなぜ悩んでいるのかを理解することです。背後にLocationPollerあるポイントは、コードが既に実行されていなくても、デバイスがどこにあるかを時折把握できるようにすることです (たとえば、1 時間ごとに Foursquare に自動的にチェックインしたい場合など)。デバイスがどこにあるかを 10 秒ごとに調べる必要がある場合はLocationManager、フォアグラウンド アクティビティから自分自身を使用する必要があります。

それが依然として正しい解決策であると確信しているLocationPoller場合、次に行うべきことは、ポーリング期間をより妥当なもの (5 分など) に延長して、それが役立つかどうかを確認することです。

demo/それでも問題が解決しない場合は、変更せずにプロジェクトを実行してみてください。それでも問題が解決しない場合は、 に何らかのバグがLocationPollerあるか、デバイスに互換性がないためにLocationPollerつまずいている可能性があります。調査を行う必要があります。

demo/プロジェクト機能する場合は、コピーを作成し、コピーが機能することを確認してから、動作を停止するまで、コピーをゆっくりと変更して、本番コードのようにします。その時点で、最後の変更セットは壊れたものを表しますLocationPoller。それがバグを表しているのLocationPollerか、それともあなたの使用のバグを表しているのかを判断できます。

于 2013-04-03T11:58:49.260 に答える