首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android无需按下按钮即可将Gps数据发送到服务器

Android无需按下按钮即可将Gps数据发送到服务器
EN

Stack Overflow用户
提问于 2014-07-31 21:23:50
回答 2查看 217关注 0票数 1

POST服务目前正在后台运行,有什么建议吗??我必须实现一个计时器吗?不知道它超出了我的领域吗?提前感谢!!

代码语言:javascript
运行
复制
  Button btnCreateUser = (Button) findViewById(R.id.btnSend);
    // button click event
    btnCreateUser.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            // creating new product in background thread
                new CreateNewUser().execute();
            }
    });
}

class CreateNewUser extends AsyncTask<String, String, String> {
    @Override
    protected String doInBackground(String... args)  {
        String lat=latitude, lng=longitude;
        SimpleDateFormat sdfDateTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
        String newtime =  sdfDateTime.format(new Date(System.currentTimeMillis()));
        EditText username = (EditText) findViewById(R.id.myText); 
        String newString= (String)username.getText().toString();
        String created_at=newtime;
        String timezone="UTC";
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(url_create_user);
        String responseBody = "";
        HttpResponse response = null;

        try {

            String base64EncodedCredentials = "Basic " + Base64.encodeToString( 
          (username + ":" + created_at +":"+timezone+":"+lat+":"+lng).getBytes(), 
                    Base64.NO_WRAP);

            httppost.setHeader("Authorization", base64EncodedCredentials);
            httppost.setHeader(HTTP.CONTENT_TYPE,"application/json");
            JSONObject obj = new JSONObject();
            obj.put("username", String.valueOf(newString)); 
            obj.put("created_at",String.valueOf(newtime));
            obj.put("timezone", String.valueOf(timezone));
            obj.put("lat", String.valueOf(latitude));
            obj.put("lng", String.valueOf(longitude));
            httppost.setEntity(new StringEntity(obj.toString(), "UTF-8"));

            // Execute HTTP Post Request
            response = httpclient.execute(httppost);

            if (response.getStatusLine().getStatusCode() == 200) {

                Log.d("response ok", "Reached Server ok");
                 startActivity(new Intent("com.xxxxx.CLEARSCREEN"));

            } else {
                Log.d("response not ok", "Something went wrong :/");
            }
            responseBody = EntityUtils.toString(response.getEntity());

        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        catch (JSONException e) {
           e.printStackTrace();
        }
        return responseBody;
    }
EN

回答 2

Stack Overflow用户

发布于 2014-07-31 21:40:36

你可以通过以下代码来解决这个问题:

代码语言:javascript
运行
复制
 Timer timer = new Timer();

  timer.scheduleAtFixedRate(new TimerTask() {
  public void run() {

    btnCreateUser.post(new Runnable() {
                @Override
                public void run() {
                    btnCreateUser .performClick();
                }
            }); 
  }
   }, 0, 14400); // for 4 hours
票数 1
EN

Stack Overflow用户

发布于 2014-08-06 18:59:45

使用AlarmManager (http://developer.android.com/reference/android/app/AlarmManager.html)在将来重复启动您的活动。

假设您用于收集用户数据并将其发送到服务器的活动名为YourActivity,只需添加一些静态方法即可,如下所示,用于安排活动启动。您可以在应用程序启动时或从BOOT_COMPLETE BroadcastReceiver调用schedule方法。

代码语言:javascript
运行
复制
public static void schedule(Context context, String url,
        long triggerAtMillis, long intervalMillis) {
    final AlarmManager alarmManager =
            (AlarmManager) context.getSystemService(ALARM_SERVICE);
    alarmManager.setRepeating(AlarmManager.RTC, triggerAtMillis,
            intervalMillis, createPendingOperation(context));
}

public static void unschedule(Context context) {
    final AlarmManager alarmManager =
            (AlarmManager) context.getSystemService(ALARM_SERVICE);
    alarmManager.cancel(createPendingOperation(context));
}

private static PendingIntent createPendingOperation(Context context) {
    return PendingIntent.getActivity(
            context, 0, new Intent(context, YourActivity.class),
            PendingIntent.FLAG_CANCEL_CURRENT);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25060024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档