- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在开发一个应用程序,因为当我点击开始按钮时,我必须每 1 分钟向服务器发送一次经纬度值,如果我点击停止按钮,它必须停止向服务器发送值。我尝试使用 runnable 它的工作但有时它不起作用。我不知道这是不是正确的过程,请给我任何解决方案
公共(public)类 MonitoringActivity 扩展 Activity {
private String lat;
private String lng;
private double latd;
private double lngd;
private Button startOrDelBtn;
//Runnable myHandlerTask;
private static Runnable mHandlerTask;
protected static final long INTERVAL = 2000*30;
protected static Handler mHandler;
private String val;
private int NOTIFICTION_ID=1;
NotificationCompat.Builder mBuilder;
private NotificationManager notificationManager;
MediaPlayer player ;
//private int flag_Out = 2;
private int flag_In = 1;
private String shedForPanicVal;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActionBar bar = getActionBar();
bar.setDisplayShowHomeEnabled(false);
bar.setDisplayShowTitleEnabled(false);
bar.setDisplayShowCustomEnabled(true);
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#ffffff")));
getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
getActionBar().setCustomView(R.layout.action_bar_jamlocation);
setContentView(R.layout.activity_monitoring);
startOrDelBtn = (Button)findViewById(R.id.monitorId);
mHandlerTask = new Runnable()
{
@Override
public void run() {
mHandler = new Handler();
mHandler.postDelayed(mHandlerTask, INTERVAL);
String checkShValForPanic = SharedDB.getValue(MonitoringActivity.this);
if(checkShValForPanic=="2"){
// new SendDataAsync(MonitoringActivity.this,"2",latd,lngd).execute();
Log.e("Panic", "status 2");
// SharedDB.setValue(MonitoringActivity.this, "2");
new SendLatLngAsync(MonitoringActivity.this,"2",latd,lngd).execute();
}
else{
// else if(checkShValForPanic=="1"){
//new SendDataAsync(MonitoringActivity.this,"1",latd,lngd).execute();
Log.e("Non Panic", "status 1");
// SharedDB.setValue(MonitoringActivity.this, "1");
// SharedDB.startOrStopShare(MonitoringActivity.this, flag_In);
new SendLatLngAsync(MonitoringActivity.this,"1",latd,lngd).execute();
}
// }
}
};
int runFlag = SharedDB.getFlag(MonitoringActivity.this);
// if flag is not there i shared preference
if(runFlag==0){
Log.e("NEW", "ACTIVITY");
SharedDB.startOrStopShare(MonitoringActivity.this, flag_In);
mHandlerTask.run();
}
else{
Log.e("ALREADY", "EXIST ACTIVITY");
}
// Notification Initialization
}
public void stopMonitoring(View v){
v.playSoundEffect(android.view.SoundEffectConstants.CLICK);
String startOrDeText = startOrDelBtn.getText().toString().trim();
try {
if(startOrDeText.equals("Stop")){
startOrDelBtn.setText("Start");
mHandler.removeCallbacks(mHandlerTask);
Log.e("STOPPED", "BUTTON");
// new SendDataAsync(MonitoringActivity.this,"0",latd,lngd).execute();
//SharedDB.startOrStopShare(MonitoringActivity.this, flag_Out);
SharedDB.removeFlag(MonitoringActivity.this);
SharedDB.startOrStopShare(MonitoringActivity.this,0);
SharedDB.setValue(MonitoringActivity.this, SharedDB.defaultVal);
new SendLatLngAsync(MonitoringActivity.this,"0",latd,lngd).execute();
notificationManager.cancel(NOTIFICTION_ID);
}
else if(startOrDeText.equals("Start")){
//SharedDB.startOrStopShare(MonitoringActivity.this, flag_Out);
Log.e("STARTED", "BUTTON");
startOrDelBtn.setText("Stop");
SharedDB.removeFlag(MonitoringActivity.this);
SharedDB.startOrStopShare(MonitoringActivity.this,flag_In);
SharedDB.setValue(MonitoringActivity.this, "1");
mHandlerTask.run();
notificationManager.notify(NOTIFICTION_ID,mBuilder.build());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void panicReport(View v){
val="2";
try {
startOrDelBtn.setText("Stop");
mHandler.removeCallbacks(mHandlerTask);
SharedDB.removeFlag(MonitoringActivity.this);
SharedDB.startOrStopShare(MonitoringActivity.this,flag_In);
SharedDB.setValue(MonitoringActivity.this, "2");
mHandlerTask.run();
notificationManager.notify(NOTIFICTION_ID,mBuilder.build());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public class SendLatLngAsync extends AsyncTask<Void, Void, Void>{
private HttpPost httpPost;
private HttpGet httpGet;
private ArrayList<NameValuePair> arryPair;
private DefaultHttpClient httpClient;
private String response;
private Context mContext;
private double longitute;
private double latitute;
private String mStatus;
private String lati;
private String longi;
private String lat;
private String lng;
GPSTracker gpsTracker = new GPSTracker(MonitoringActivity.this);
double Lat = gpsTracker.getLatitude();
double Lng = gpsTracker.getLongitude();
private int responsecode;
private boolean isConnectedToInternet;
private ProgressDialog pDialog;
public SendLatLngAsync(Context context,String status,double lat,double lng){
this.mContext = context;
this.mStatus = status;
this.latitute = lat;
this.longitute = lng;
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
/*pDialog = new ProgressDialog(MonitoringActivity.this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();
isConnectedToInternet=CheckNetClass.isConnectedToInternet(MonitoringActivity.this);*/
}
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
Log.e("Current In Async", Lat+" "+Lng);
String lat1= Double.toString(Lat);
String lng1= Double.toString(Lng);
/*GPSTracker tracker = new GPSTracker(this.mContext);
String latg = Double.toString(tracker.getLatitude());
String lang = Double.toString(tracker.getLongitude());
Log.e("FROM TRACKER", latg+" "+lang);*/
httpClient =new DefaultHttpClient();
httpPost = new HttpPost(UrlConstant.SEND_PANIC);
//httpGet = new HttpGet(UrlConstant.SEND_PANIC_FOR_GUEST);
try {
//Log.e("LATI", lati+longi);
arryPair = new ArrayList<NameValuePair>();
arryPair.add(new BasicNameValuePair("lat",lat1));
arryPair.add(new BasicNameValuePair("lng",lng1));
arryPair.add(new BasicNameValuePair("trackid","Durga"));
arryPair.add(new BasicNameValuePair("status", mStatus));
httpPost.setEntity(new UrlEncodedFormEntity(arryPair));
HttpResponse responsePOST = httpClient.execute(httpPost);
HttpEntity resEntity = responsePOST.getEntity();
response = EntityUtils.toString(resEntity, HTTP.UTF_8 );
responsecode = responsePOST.getStatusLine().getStatusCode();
Log.e("STATUS CODE", ""+responsecode);
Log.i("SomeTag",
"doInBackGround done at " + System.currentTimeMillis());
Log.e("MONITOR", response);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
/*pDialog.dismiss();
if(isConnectedToInternet)
if(responsecode==200){
}
else{
GetAlertDialog.getDialog(MonitoringActivity.this, GetAlertDialog.serverdown);
}
else{
GetAlertDialog.getDialog(MonitoringActivity.this, GetAlertDialog.networkfailure);
}
//Toast.makeText(MonitoringActivity.this, "SUCCESS", 100).show(); */
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Uri uri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
Intent intent = new Intent(this,MonitoringActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pIntent = PendingIntent.getActivity(this,0,intent,0);
mBuilder = new NotificationCompat.Builder(this).setContentTitle("TRACKING")
.setSmallIcon(R.drawable.panic)
.setAutoCancel(true)
.setSound(uri)
.setContentIntent(pIntent);
notificationManager.notify(NOTIFICTION_ID,mBuilder.build());
}
}
最佳答案
我在背景中使用 with service 解决了我的问题
private HttpPost httpPost;
private HttpGet httpGet;
private ArrayList<NameValuePair> arryPair;
private DefaultHttpClient httpClient;
private String response;
private int responsecode;
private double Lat;
private double Lng;
private double lat;
private double lng;
private int status;
//private String status;
private static Runnable mHandlerTask;
protected static final long INTERVAL = 1000*10;
protected static Handler mHandler;
public SendLatLngService() {
}
@Override
public IBinder onBind(Intent intent) {
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
//status= intent.getStringExtra("status");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onCreate() {
Toast.makeText(this, "Service was Created", Toast.LENGTH_LONG).show();
mHandlerTask = new Runnable()
{
@Override
public void run() {
mHandler = new Handler();
mHandler.postDelayed(mHandlerTask, INTERVAL);
new asyncServ().execute();
}
};
mHandlerTask.run();
}
@Override
public void onStart(Intent intent, int startId) {
// Perform your long running operations here.
Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
}
@Override
public void onDestroy() {
mHandler.removeCallbacks(mHandlerTask);
Log.e("DESTROYED", "CALLED");
new asyncServ().execute();
Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
}
@Override
public boolean bindService(Intent service, ServiceConnection conn, int flags) {
// TODO Auto-generated method stub
return super.bindService(service, conn, flags);
}
public class asyncServ extends AsyncTask<Void, Void, Void>{
public asyncServ(){
GPSTracker gpsTracker = new GPSTracker(SendLatLngService.this);
Lat = gpsTracker.getLatitude();
Lng = gpsTracker.getLongitude();
}
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
String lat1= Double.toString(Lat);
String lng1= Double.toString(Lng);
httpClient =new DefaultHttpClient();
httpPost = new HttpPost(UrlConstant.SEND_PANIC);
Log.e("Status", status+"");
try {
//Log.e("LATI", lati+longi);
arryPair = new ArrayList<NameValuePair>();
arryPair.add(new BasicNameValuePair("lat",lat1));
arryPair.add(new BasicNameValuePair("lng",lng1));
httpPost.setEntity(new UrlEncodedFormEntity(arryPair));
HttpResponse responsePOST = httpClient.execute(httpPost);
HttpEntity resEntity = responsePOST.getEntity();
response = EntityUtils.toString(resEntity, HTTP.UTF_8 );
Log.i("SomeTag",
"doInBackGround done at " + System.currentTimeMillis());
// Log.e("MONITOR", response);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}
You can call startService(intent) if you want to start service and i you want to stop then you
call stopService(intent) from your activity you must add service name in the manifest file
关于android - 如何每 1 分钟在后台向服务器发送经纬度值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24837355/
从 0 开始搭建一套后台管理系统,成本巨大,所以都会选择一套成熟的组件库,基于此,再堆叠业务逻辑。我们公司的组件库基于 Ant Design。Ant Design 包含一套完整的后台解决方案,不仅
在我的 IOS 应用程序中,我有一个标记为 retain 的 NSDate* 属性 当我的应用程序再次激活时,属性值已被释放。 我是否误解了属性和内存管理的工作原理,我该如何防范? 最佳答案 很明显,
我有一个使用 BackgroundWorker 组件的示例 WinForms 应用程序。它工作正常,但是当我点击 Cancel 按钮取消后台线程时,它并没有取消线程。当我点击 Cancel 按钮调用
我目前正在开发一个应用程序,该应用程序在启动时会对服务器执行 ping 操作,该服务器会为每个连接的设备返回一个唯一标识符。设备每 5 秒从服务器检索另一页以获取一组不同的数据。这个唯一的 ID 可以
我正在开发一个应用程序,当它通过主页按钮在后台按下时,计时器应该启动,当应用程序返回前台并且计时器已经过了一定时间时,应该是执行。 我的问题是 当我的应用程序转到背景/前景? 是否有特殊的方法或其他技
我有 map View ,其中几乎没有 MKPointAnnotation。 一切正常,但是, View 的 MKPoiintAnnotation 的“背景”是“不可见的”,因此不是很“可见”。 我想
我在 iOS 中开发广告数据应用程序。我的应用程序广告数据在前台很好。但我想在 ios 后台宣传信标数据。我设置了背景外设设置。和广告数据 advertisingData = [CBAdvertise
如果我有一组操作,我想根据特定条件在后台工作程序中运行,例如,我有 10 个条件 if(a) BackgroundWorker doA = new backgroundworker() if(
我想独立运行一个函数。从我调用的函数中,我想在不等待其他函数结束的情况下返回。 我试过用 threadind,但这会等待,结束。 thread = threading.Thread(target=my
我想在用户在线时立即执行一些任务,即使他在后台也是如此。我正在使用 Reachability 类来检查互联网。但是当我在后台时,这个类没有通知我。我知道有人早些时候问过这个问题,但没有找到任何解决方案
我在后台播放文本转语音时出现间歇性(哎呀!)问题,由 Apple Watch 触发。我已经正确设置了后台模式、AVSession 类别和 WatchKitExtensionRequest 处理程序。
我有一个相当复杂的程序,所以我不会在这里转储整个程序。这是一个简化版本: class Report { private BackgroundWorker worker; public
我有一个任务在 backgroundworker 中运行。单击开始按钮,用户将启动该过程,并获得一个取消按钮来取消处理。 当用户点击取消时,我想显示一个消息框“进程尚未完成,你想继续吗”。 这里我希望
我有一个按以下方式编码的脚本。我想将它作为后台/守护进程运行,但是一旦我启动脚本,如果我关闭它从程序运行的终端窗口终止。我需要做什么来保持程序运行 loop do pid = fork do
我正在制作一个使用 ActivityRecognition API 在后台跟踪用户 Activity 的应用,如果用户在指定时间段(例如 1 小时)内停留在同一个地方,系统就会推送通知告诉用户去散步.
当尝试使用 URLSession 的 dataTaskPublisher 方法发送后台请求时: URLSession(configuration: URLSessionConfiguration.ba
当我编译这段代码时,我得到了他的错误,对象引用设置为null,错误位置在Dowork中,argumenttest.valueone = 8; public partial class Form1 :
有什么方法可以使用最小化或不活动的应用程序吗?我可以打开我的应用程序,然后打开并使用另一个应用程序,然后按一个按钮来激活我的程序吗? 例如,打开我的应用程序,打开 Safari,按下按钮(F1 或任何
我的具体要求是一个在后台运行的应用程序,被通知显示器即将进入休眠状态或者设备已经或即将达到空闲超时 - 然后唤醒并执行一些(简短的)一段代码。 我在这里找到了有关应用程序被置于后台或暂停的通知的引用:
我有一个 LSUIElement 设置为 1 的应用程序。它有一个内置编辑器,因此我希望该应用程序在编辑器打开时出现在 Cmd+Tab 循环中。 -(void)stepIntoForegrou
我是一名优秀的程序员,十分优秀!