2012-05-08 70 views
7

我要保持我的应用程序在后台运行,运行
我有将用户的位置,我们的服务器应用程序
我有以下代码:保持应用程序在后台

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中有一个称为Service的组件。 Android documnetation说**服务是一个应用程序组件,可以在后台执行长时间运行的操作,并且不提供用户界面**。为了自动启动你的应用程序,你可以使用AlarmManager。 –

回答

13

对于您的问题,一个非常简单的答案是使用Service。它将允许你在后台执行各种任务,并且是你最好的选择无声地发送你的位置到服务器

阅读this寻求帮助。

+0

你能给我一个简单的示例代码吗?谢谢:)) – akubabas

+0

+1对于简单和很好的答案:) – Lucifer

+1

看到我更新的答案或阅读[this](http://stackoverflow.com/a/2779589/966550) – waqaslam

0

Service中运行您的后台逻辑,并且如果您想提供良好的UX体验(并且也具有更高的优先级),请将Notification发布到状态栏(使用NotificationManager)。

0

你也可以在后台运行,使用Service

您的应用程序,我希望这link将帮助您

请阅读documentation进一步的细节

0

你必须使用一个服务和广播接收器

+1

你能给我一个简单的代码到这个??谢谢:) – akubabas

+0

@deadbabaz你可以很容易地从Android的开发者网站获得服务和广播接收器的代码。 – Dharmendra

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(); 
     } 
+0

在您的通话类中启动此服务并注册一个广播接收器 –

相关问题