activity 、 receiver 、および service で作成されたAndroidアプリがあります。ユーザー名とパスワードを設定するためにインストール後にアクティビティが 1 回だけ起動され、サービスが開始されます。受信者は電話の起動後にサービスを呼び出します。何が起こるかというと、電話がスリープ状態になってからしばらくしてサービスがスリープ状態になり、すべて動作する必要があります。時間。ウェブサイトへの呼び出しをスレッドに入れました。これがサービスです
public class MyService extends Service {
public int indikator=0;
public String mojsadrzaj=new String();
public String pib=new String();
public String username=new String();
public String password=new String();
public String url=new String();
public URL myURL;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
Toast.makeText(this,"Service created ...",Toast.LENGTH_LONG).show();
final SQLiteDatabase db=openOrCreateDatabase("TruckMe", MODE_PRIVATE, null);
String idvozaca=new String();
db.execSQL("create table if not exists vozac (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, idvozaca VARCHAR(15));");
Cursor d=db.rawQuery("select idvozaca from vozac", null);
if(d.getCount() > 0)
{
d.moveToLast();
idvozaca=d.getString(d.getColumnIndex("idvozaca"));
mojsadrzaj=idvozaca;
}
final Time t=new Time();
final Handler handler = new Handler();
final Runnable runnable = new Runnable() {
public void run() {
if(indikator != 0)
{
try {
URL myURL = new URL(url);
URLConnection myURLConnection = myURL.openConnection();
myURLConnection.connect();
BufferedReader in = new BufferedReader(new InputStreamReader(myURLConnection.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}
catch (MalformedURLException e) {
// new URL() failed
// ...
}
catch (IOException e) {
// openConnection() failed
// ...
}
}
indikator=1;
handler.postDelayed(this, 180000);
}
};
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_FINE);
criteria.setPowerRequirement(Criteria.POWER_LOW);
final LocationManager m=(LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
String locationprovider =m.getBestProvider(criteria,true);
LocationListener l=new LocationListener() {
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
// TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String arg0) {
}
@Override
public void onProviderDisabled(String arg0) {
}
@Override
public void onLocationChanged(Location arg0) {
String zauzetost=new String();
zauzetost="ZAUZET";
String format="MM/dd/yyyy";
SimpleDateFormat sdf = new SimpleDateFormat(format,Locale.US);
String date= sdf.format(new Date());
t.setToNow();
String longitude=new String();
String latitude=new String();
String speed=new String();
if((int)arg0.getSpeed()==0)
{
speed="0";
}
else
{
speed=""+(((int)arg0.getSpeed()*3600)/1000);
}
longitude=""+ arg0.getLongitude();
latitude=""+ arg0.getLatitude();
String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
mydate=mydate.replaceAll("\\s","");
url="http://www.compensatemeonline.com/truckmeonline/TruckMeOnline/S.php?id="+mojsadrzaj+"&a="+longitude+"&b="+latitude+"&c="+speed+"&d="+mydate+"&e="+date+"&f="+zauzetost;
Log.e("Poruka", url);
// TODO Auto-generated method stub
}
};
runnable.run();
m.requestLocationUpdates(locationprovider, 180000, 0, l);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
@Override
public void onStart(Intent intent, int startId) {
//Toast.makeText(this, "Service started onstart...",Toast.LENGTH_LONG).show();
}
@Override
public void onDestroy() {
super.onDestroy();
final SQLiteDatabase db=openOrCreateDatabase("TruckMe", MODE_PRIVATE, null);
db.execSQL("drop table vozac;");
}
}
サービスをスリープ状態にしたくないので、 m.requestLocationUpdates(locationprovider, 180000, 0, l) を 60000 に減らして、 oncreate から onstartcommant または他に何をすべきかの gps の呼び出しからすべてを入れます。