0
private class ExecuteLocations extends AsyncTask<String, Void, Void>{
    private final ProgressDialog dialog = new ProgressDialog(ListProfiles.this);

    protected void onPreExecute() {
        //this.dialog.setMessage("Starting pre-execute...");
        //this.dialog.show();
    }

    @Override
    protected Void doInBackground(String... arg0) {
        check_profiles_lm=(LocationManager) ListProfiles.this.getSystemService(LOCATION_SERVICE);  
        myLocListen = new LocationListener(){
            @Override
            public void onLocationChanged(Location location) {
                HashMap params = new HashMap();
                params.put("lat", Double.toString(location.getLatitude()));
                params.put("long", Double.toString(location.getLongitude()));
                postData("http://mydomain.com",params);

            }
            @Override
            public void onStatusChanged(String provider, int status,Bundle extras) { 
            }
            @Override
            public void onProviderDisabled(String provider) { 
            }
            @Override
            public void onProviderEnabled(String provider) {
            }
        };      
        check_profiles_lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 30000, 0, myLocListen);
        return null;
    }

    protected void  onPostExecute(final Void unused) {
        if (this.dialog.isShowing()) {
            //this.dialog.dismiss();
        }
        //Do something else here 
    }

}

基本的に、私の目的は次のとおりです。

  1. 緯度/経度を 1 分ごとに Web サイトに常に投稿します。
  2. もちろん、これを別のスレッドで実行したいので、UI スレッドが混乱することはありません。この AsyncTask はそれを解決するはずですが、エラーが発生し、その理由がわかりません。

私の目的を達成するために何ができますか? それは非常に簡単です...場所をスキャンし、バックグラウンドで毎分 Web に投稿するだけです。

ちなみに私の onCreate メソッドはこんな感じです。基本的にはそれだけです。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
            new ExecuteLocations().execute();
            setContentView(R.layout.main_list);
    }
4

2 に答える 2

1

3 つのステップに分割します。

  1. AsyncTask を使用せずに作業したいものを作成する
  2. AsyncTask を理解していることを確認し、単純な Log.e("haha", "gotcha") を実行しdoInBackground(...)て、それが表示されることを確認します
  3. 2つを組み合わせます。

この場合、私はServiceおそらくAlarmManager. とにかく後者が必要になると思います。

于 2010-02-18T06:50:19.670 に答える
0

これをサービスとして作成します。ロケーションイベントに登録して適切に行動するため、Timer や AlarmManager は必要ありません。

位置イベントをリッスンする例は、 http://code.google.com/p/android-bluetooth-on-motion/source/browse/#svn/trunk/BluetoothOnMotion/src/com/elsewhatにあります。

        locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_NETWORK, MIN_DISTANCE_NETWORK,locationListener);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_GPS, MIN_DISTANCE_GPS,locationListener);
于 2010-02-18T07:34:06.353 に答える