0

電話追跡アプリを作成しています。追跡したデバイスからインターネット (実際には緯度と経度) からデータを取得したいと考えています。追跡された電話は問題ありません。onLocationChanged が実行されるたびに、緯度と経度がデータベース サーバーに送信されます。追跡電話アプリの場合、そのデータを取得できますが、oncreate の場合は 1 回だけです。asynctask を使用してデータを取得します。問題は、X 分ごとにそのデータを取得するのが難しいことです。handler を使用する必要がありますか? ここで誰かがコードを手伝ってくれますか?

これまでの私のコードは次のとおりです

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final String Url = "http://mysite.com/tes.php";

    mf =(SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
    gmap = mf.getMap();
    gmap.setMyLocationEnabled(true);
    gmap.setMapType(gmap.MAP_TYPE_SATELLITE);

    lat= (TextView) findViewById(R.id.lati);
    longit = (TextView) findViewById(R.id.longi);



            // TODO Auto-generated method stub
             lokasibaru lokasi = new lokasibaru();
            lokasi.execute(Url);


}

これは私の非同期タスクです

private class lokasibaru extends AsyncTask <String,ArrayList<String>,ArrayList<String>>{

    String latitude,longitude;      

        protected void onProgressUpdate(String... values) {


            }
        protected void onPostExecute(ArrayList<String> hasil) {

        latitude = hasil.get(0);
        longitude = hasil.get(1);
        lat.setText(latitude);  
        longit.setText(longitude);


        }

        @Override
        protected ArrayList<String> doInBackground(String... value) {
            ArrayList<String> result = null ;
            String Url = value[0];
            koneksi get = new koneksi();

            try {
                //result = GetR.getdata(Url);
                result = get.getdata(Url);

            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }



            return result;
        }

    }

これは、インターネットからデータを取得するための私の koneksi クラスです

public class koneksi {

public ArrayList<String> getdata(String url) throws Exception{
    BufferedReader in = null;
    String data = null;
    ArrayList<String> kordinat = new ArrayList<String> ();
    int count ;
    try{
        HttpClient client= new DefaultHttpClient();
        URI site = new URI(url);
        HttpGet req = new HttpGet();
        req.setURI(site);
        HttpResponse resp = client.execute(req);
        count =0;
        in = new BufferedReader(new InputStreamReader(resp.getEntity().getContent()));
        StringBuffer sb = new StringBuffer("");
        String l = "";
        String nl = System.getProperty("line.separator");

        while ((l = in.readLine()) != null ){
        //sb.append(l+nl);
        kordinat.add(l);
        count++;
        }
    in.close();
    data = sb.toString();
    return kordinat;
    }
    finally{

    }

}

}
4

2 に答える 2

0

Android Serviceを調べて、サービス内でScheduledExecutorServiceを作成します。これは、ページを要求して場所を送信するRunnableタスクを開始します。

ScheduledExecutorServiceには、次のように時間間隔を渡すことができます。

//this will run the task every 5 minutes
scheduleTaskExecutor.scheduleAtFixedRate(task, 0, 5, TimeUnit.MINUTES);

API 9 未満の場合

//this will run the task every 5 minutes
scheduleTaskExecutor.scheduleAtFixedRate(task, 0, 300, TimeUnit.SECONDS);
于 2013-10-09T05:35:51.510 に答える
0

ハンドラーを使用する

   private Handler m_handler = new Handler();

// ..............

Runnable m_handlerTask = new Runnable() {

    @Override
    public void run() {
        m_handler.postDelayed(m_handlerTask, Xmins);
             new lokasibaru().execute();
    }
};


private void startGettingDataTask()
{
    m_handlerTask.run(); 
}

private void stopGettingDataTask()
{
    m_handler.removeCallbacks(m_handlerTask);
}

コールバックstartGettingDataTask()を開始しstopGettingDataTask()て削除するには、コールしてください!

于 2013-10-09T05:31:39.073 に答える