1

私は現在アプリケーションを開発しており、この郵便番号を使用してGPSロックを取得しています。 Androidでユーザーの現在地を取得するための最も簡単で堅牢な方法は何ですか?

それは魅力のように機能します!それは私の要件に非常に適しています。私が今やろうとしているのは、このメソッドを10分ごとにトリガーして、gpsシグナルを取得し、それをtxtファイルに保存することです。私の問題は、AlarmManagerがアクティビティのonCreate()メソッドをAFAIKと呼ぶときに、どのように機能するかを理解できなかったことです。電話がスリープ状態の場合でも、バックグラウンドで10分ごとにAlarmManagerに特定のメソッドを呼び出させるにはどうすればよいですか?

編集2:A--Cによって提供されたコードを使用しましたが、何らかの理由で、アラームがクラスAlarmBroadcastReceiverのメソッドを呼び出していません。これは、MainActivityの私のメソッドです。

    Intent intent = new Intent (this, AlarmBroadcastReceiver.class);
    PendingIntent pendIntent = PendingIntent.getBroadcast(this, 1,  intent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager = (AlarmManager) getSystemService (Context.ALARM_SERVICE);
    alarmManager.cancel(pendIntent); //cancel if active already

    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis()+4000,
            4000, pendIntent);

およびAlarmBroadcastReceiverクラス。

    public class AlarmBroadcastReceiver extends BroadcastReceiver{
public float accuracy;
public double latitude;
public double longitud;
public static boolean Activado=false;
public void onReceive(Context context, Intent intent) {
Log.d("AlarmManager", "Method onReceiveCalled");
    }

私が間違っているのは何ですか?

4

1 に答える 1

1

'Activityのメソッドが静的で同じプロセスで実行されている場合を除き、インテントを介して単一のメソッドを実行することはありません。

アクティビティが何をすべきかを指定し、onCreate()そのロジックを処理するインテントを介して、アクティビティにエクストラを渡すことができます。

また、AlarmReceiverに機能を直接配置することもできます。これは、そのクラスで可能な限りローカルであるためです。

したがって、もちろん、アクティビティをこれを処理するバックグラウンドサービスに置き換えることができます。

最後に、10分ごとにテキストファイルに保存するため、保存専用のクラスを作成できる可能性があります。String必要な場所からand Context(ファイル操作には)が必要だと思います)を使用してそのクラスを呼び出すContextだけです。これは、GPSコードと統合できます。ほとんどの場合、別のコンストラクターと統合できるため、GPSクラスは、位置情報を取得して保存していることを認識します。

アラーム設定がどのように見えるかの例を次に示します。

    Intent intent = new Intent (this, AlarmBroadcastReceiver.class);
    PendingIntent pendIntent = PendingIntent.getBroadcast(this, 1,  intent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager = (AlarmManager) getSystemService (Context.ALARM_SERVICE);
    alarmManager.cancel(pendIntent); //cancel if active already
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis()+600000,
            600000, pendIntent);

したがって、インテントが必要です。インテントはPendingIntentに変換されます。次に、AlarmManagerインスタンスを取得する必要があります。私のコードの最後の行は、10分前に10分の繰り返しでアラームを登録します。AlarmManager.RTC_WAKEUPアラームを実行するために電話を強制的にウェイクアップさせます。

于 2012-12-19T01:48:56.490 に答える