背景

2012-05-08 20 views
7
私はバックグラウンドで実行されている自分のアプリケーションを維持したい

で実行中のアプリケーションを維持
私たちのサーバーにユーザーの位置を送信するアプリケーションを持っている
I次のコードを持っている:背景

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);*/ 

      } 
     } 

私は私のapplicatioinをしたいがバックグラウンドで実行しています。電話がオンになったら自動的に起動します。

+0

コンポーネントはAndroidでサービスとして知られています。 Android documnetationのコメント**サービスは、バックグラウンドで長時間実行される操作を実行できるアプリケーションコンポーネントであり、ユーザーインターフェイス**を提供しません。アプリを自動的に起動するには、AlarmManagerを使用できます。 –

答えて

13

非常に簡単な答えはServiceです。バックグラウンドでさまざまなタスクを実行できるようになります。サーバにサイレントに自分の位置を送信するためのの最善の策です。

this Readヘルプを参照してください。

+0

あなたは私に簡単なサンプルコードを与えることができますか?ありがとうございました:)\ – akubabas

+0

+1シンプルで素敵な答えのために: – Lucifer

+1

私の更新された回答を参照してくださいまたは[this](http://stackoverflow.com/a/2779589/966550) – waqaslam

0

Serviceでバックグラウンドロジックを実行し、良好なUXエクスペリエンスを提供したい場合は(優先度も高くする)Notificationをステータスバーに投稿してください(NotificationManagerを使用)。

0

あなたは、私がこのlinkはあなたに

を助けることを願っていますService

を使用してバックグラウンドで実行されているアプリケーションを保つことができますが、サービスやブロードキャストを使用する必要があり、さらに詳細

0

ためdocumentationをお読みくださいレシーバ

+1

私にこれに簡単なコードはありますか?ありがとうございました:) – akubabas

+0

@deadbabaz Androidの開発者サイトからサービスと放送受信機のコードを簡単に取得できます。 – Dharmendra

0

グラブの場所詳細情報.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(); 
     } 
+0

呼び出し元のクラスでこのサービスを開始し、ブロードキャスト受信者を登録します –