11

アプリケーションをバックグラウンドで実行し続けたい
ユーザーの場所をサーバー
に送信するアプリケーションがあります次のコードがあります:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    LocationManager locationManager;
    String context = Context.LOCATION_SERVICE;
    locationManager = (LocationManager)getSystemService(context);

    Criteria criteria = new Criteria();
    criteria.setAccuracy(Criteria.ACCURACY_FINE);
    criteria.setAltitudeRequired(false);
    criteria.setBearingRequired(false);
    criteria.setCostAllowed(true);
    criteria.setPowerRequirement(Criteria.POWER_LOW);
    String provider = locationManager.getBestProvider(criteria, true);

    updateWithNewLocation(null);

    locationManager.requestLocationUpdates(provider, (10*60*1000), 10,
                                           locationListener);
}
private final LocationListener locationListener = new LocationListener() {
    public void onLocationChanged(Location location) {
      updateWithNewLocation(location);
    }

    public void onProviderDisabled(String provider){
      updateWithNewLocation(null);
    }

    public void onProviderEnabled(String provider){ }
    public void onStatusChanged(String provider, int status, 
                                Bundle extras){ }
  };
  public void updateWithNewLocation(Location location) {


        if (location != null) {
            Dbhelper helper = new Dbhelper(this);
            final SQLiteDatabase db = helper.getWritableDatabase();
            long time = System.currentTimeMillis();
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");
            final String curTime = df.format(time);
            final double lat = location.getLatitude();
            final double lng = location.getLongitude();
            final double alt = location.getAltitude();
            System.out.println(lat);
            System.out.println(lng);
            System.out.println(alt);
            db.execSQL("INSERT INTO location (longitude,latitude,altitude,tgl_buat) VALUES " +
            "('"+lng+"','"+lat+"','"+alt+"','"+curTime+"')");
            db.close();
            /*Timer timer = new Timer();
            timer.scheduleAtFixedRate(new TimerTask(){
                @Override
                public void run(){
                    db.execSQL("INSERT INTO location (longitude,latitude,altitude,tgl_buat) VALUES " +
                            "('121.2149012','-6.217837','0.0','2012-05-07 10:20:01')");
                    db.close();
                }
            }, 10*60*1000, 10*60*1000);*/

          } 
       }

アプリケーションをバックグラウンドで実行したい。電話がオンになったときに自動的に起動したい

4

5 に答える 5

14

あなたの問題に対する非常に簡単な答えは、サービスを使用することです。これにより、バックグラウンドでさまざまなタスクを実行できるようになり、現在地をサーバーにサイレントに送信するための最善の策です。

ヘルプが必要な場合は、この回答をお読みください。

于 2012-05-08T07:16:03.500 に答える
1

を使用して、アプリケーションをバックグラウンドで実行し続けることができますService

このリンクがお役に立てば幸いです

詳細については、ドキュメントをお読みください

于 2012-05-08T07:37:26.557 に答える
0

バックグラウンドロジックをで実行しService、優れたUXエクスペリエンスを提供したい場合(および優先度を高くしたい場合)はNotification、ステータスバーに投稿します(を使用NotificationManager)。

于 2012-05-08T07:16:21.400 に答える
0

とを使用する必要がありServiceますBroadcastReceiver

于 2012-05-08T08:10:06.140 に答える
0

GrabLocationDetails.java

このコードをGrabLocationDetails.java

 public class GrabLocationDetails extends Service implements LocationListener {

        double lat,lng;
        private LocationManager locationManager;
        private String provider;
        boolean isGps;
        private ArrayList<String> mList;
        Context GLDContext;

        public GrabLocationDetails(Context cont){
            this.GLDContext=cont;
        }
        public GrabLocationDetails(){}
        @Override
        public void onCreate() {
            super.onCreate();
            mList = new ArrayList<String>();
            isGps = false;
            lat=0.0;
            lng=0.0;
        }

        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {

            //super.onStart(intent, startId);

            try {
                locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
                Criteria criteria = new Criteria();
                provider = locationManager.getBestProvider(criteria, false);
                LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
                boolean enabled = service.isProviderEnabled(LocationManager.GPS_PROVIDER);
                if (!enabled) {
                    isGps = false;
                    ListAddItem(isGps);
                    SendBroadcast();
                } else {
                    isGps = true;
                    Location location = locationManager.getLastKnownLocation(provider);
                    lat=(location.getLatitude());
                    lng=(location.getLongitude());
                    ListAddItem(true);
                    SendBroadcast();
                    locationManager.requestLocationUpdates(provider, 400, 1, this);
                }

            } catch (Exception e) {
                ListAddItem(isGps);
                SendBroadcast();
            }
            return super.onStartCommand(intent, flags, startId);
        }

        @Override
        public void onDestroy() {
            super.onDestroy();
            //locationManager.removeUpdates(this);
        }

        public  void SendBroadcast(){
            Intent broadcastIntent = new Intent();
            broadcastIntent.setAction(CommandExecutionModule.LocationDetails);
            broadcastIntent.putExtra("Data", mList);
            sendBroadcast(broadcastIntent);

        }
        public void ListAddItem(boolean GPS) {
            //if(!GPS)
            //mList.add("0");
            //else
            //mList.add("1");
            mList.add(Double.toString(lat));
            mList.add(Double.toString(lng));
        }

        /**************************************************************************************************************/

        @Override
        public void onLocationChanged(Location location){
            locationManager.requestLocationUpdates(provider, 400, 1, this);
            mList.clear();
            lat = (location.getLatitude());
            lng = (location.getLongitude());
            ListAddItem(isGps);
            SendBroadcast();
            locationManager.removeUpdates(this);
            stopSelf();
        }

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            locationManager.requestLocationUpdates(provider, 400, 1, this);
        }

        @Override
        public void onProviderEnabled(String provider){
            isGps=true;
        }
        @Override
        public void onProviderDisabled(String provider){
            isGps=false;
            lat=0.0;
            lng=0.0;
            mList.clear();
            ListAddItem(isGps);
            //SendBroadcast();
        }
于 2016-03-23T18:48:14.257 に答える