gpt4 book ai didi

Android:如何在后台永远运行应用程序?

转载 作者:行者123 更新时间:2023-11-29 21:47:41 24 4
gpt4 key购买 nike

我创建了一个将用户位置发送到服务器的应用程序..它使用异步任务(doInBackground 和 onPostExecute 方法)在后台运行...但它运行速度很慢..在编码中我使用了 Thread.sleep(300000 ) 间隔 5 分钟...我认为应用程序停止运行..

YasarKhan.java

    Location location; // location
double latitude; // latitude
double longitude; // longitude

// The minimum distance to change Updates in meters
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 1000; // 1000
// meters

// The minimum time between updates in milliseconds
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 20; // 20 minute

// Declaring a Location Manager
protected LocationManager locationManager;
boolean done = true;

// public YasarKhan(Context context) {
// this.mContext = context;
//
//
// }



public void gpsTraking() {

// check if GPS enabled
if (true) {
stAdd = "";
double latitude = getLatitude();
double longitude = getLongitude();
Geocoder gc = new Geocoder(getBaseContext());
try
{
List<Address> list = gc.getFromLocation(latitude, longitude, 2);
Address a = list.get(0);
for (int i = 0; i <= a.getMaxAddressLineIndex(); i++) {
stAdd = stAdd + "\n " + a.getAddressLine(i);
}
stAdd = stAdd + " " + a.getLocality() + "\n"
+ a.getFeatureName();

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


}

public void passing()
{
new SendFeedback().execute(imei,simSerialNumber,stAdd,currentTime);
}


class SendFeedback extends AsyncTask<String, Void, String>
{
@Override
protected String doInBackground(String... paramArrayOfParams)
{
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
request.addProperty("strIMEINumber", paramArrayOfParams[0]);
request.addProperty("strSIMNumber", paramArrayOfParams[1]);
request.addProperty("strAddress", paramArrayOfParams[2]);
request.addProperty("strTime", paramArrayOfParams[3]);

SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.encodingStyle = SoapSerializationEnvelope.ENC;
envelope.setOutputSoapObject(request);
System.setProperty("http.keepAlive", "false");

try
{
HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION, envelope);
// SoapObject result = (SoapObject) envelope.getResponse();
SoapPrimitive response = (SoapPrimitive) envelope.getResponse();
String resultData = response.toString();
Log.d("response", resultData);
return resultData;
}
catch (Exception e)
{
Log.d("My Error", "" + e.getMessage());

}
return resultData;
}

@Override
protected void onPostExecute(String result)
{
Log.d("strResult", result);
super.onPostExecute(result);
}
}
}

MyReceiver.java

package com.example.yasar;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class MyReceiver extends BroadcastReceiver {


public static final String TAG = "com.example.gpstraking";
@Override
public void onReceive(Context context, Intent intent)
{

try
{

Intent serviceIntent = new Intent(context, YasarKhan.class);
context.startService(serviceIntent);
}
catch(Exception e)
{
Log.e("My Service Error",e.getMessage());
}


}



}

主 Activity .java

package com.example.yasar;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("naveeeen","kushwaaahaACTIVITY");
Intent serviceIntent = new Intent(this, YasarKhan.class);
this.startService(serviceIntent);

}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
//getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}

}

最佳答案

在 onStartCommand() 中使用服务:

  1. 使用 requestLocationUpdates。

    locationManager.requestLocationUpdates(provider, 5000, 0, myLocationListener);
  2. 在onStartCommand()中调用此方法检查提供者

     public void testProviders() 
    {
    //Choose only one provider
    Location location = locationManager.getLastKnownLocation(provider);
    if (location != null)
    {
    lat = location.getLatitude();
    lng = location.getLongitude();
    str = "Test Provider method says :"+" Latitude = " +lat + " and " + " Longitude = " +lng;
    System.err.println("Current Latitude and Longitude:"+lat+","+lng);

    }
    else
    {
    str = " No Location ";
    }
    System.err.println(str);
    Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();
    }
  3. 使用监听器

     LocationListener myLocationListener = new LocationListener()
    {

    @Override
    public void onLocationChanged(Location location)
    {
    if (location != null)
    {
    Clat = location.getLatitude();
    Clng = location.getLongitude();
    System.out.println("Change latitude and Longitude:"+Clat+", "+Clng+"timer: " +System.currentTimeMillis());
    String str = " LocationListener : Change latitude and Longitude: " +Clat+ ", " +Clng+ " timer: " +System.currentTimeMillis();
    System.err.println(str);
    Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();
    new SendPGLocationToServer().execute();
    }
    else
    {
    str = " No Location. ";
    Toast.makeText(getApplicationContext(), str, Toast.LENGTH_SHORT).show();
    }
    }
  4. 最后,使用 AsyncTask 将位置发送到服务器。

关于Android:如何在后台永远运行应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15354849/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com