2012-09-13 12 views
7

Duplicar posible:
how to run application in background in android?Cómo ejecutar aplicaciones Android en el fondo

estoy haciendo proyectos usando el administrador de ubicación si mi lugar de latitud y longitud igual a la misma que está en el móvil de base de datos El perfil debe ir al modo silencioso. De modo que necesito seguir actualizando mi ubicación usando el administrador de ubicaciones. Lo hice. Pero si cierro mi aplicación, no está funcionando. pero mi aplicación debería funcionar aunque cierre mi aplicación. Intenté con la tarea asíncrona funcionar cuando cerré la aplicación pero después de cambiar al modo alto de forma manual no cambia a silencioso. También debería recibir una notificación cuando mi aplicación se ejecute n help.tks background..please de antelación

aquí es mi código

public class ShowLocationActivity extends Activity implements LocationListener { 
     private TextView latituteField; 
     private TextView longitudeField; 
     private LocationManager locationManager; 
     private String provider; 
     double lat,lng; 
     Location location; 
     AudioManager mobilemode ; 
     private Boolean flag = false; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.location); 
     latituteField = (TextView) findViewById(R.id.TextView02); 
     longitudeField = (TextView) findViewById(R.id.TextView04); 
     mobilemode = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE); 
     // Get the location manager 
     locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     // Define the criteria how to select the locatioin provider -> use 
     // default 
     Criteria criteria = new Criteria(); 
     provider = locationManager.getBestProvider(criteria, false); 
     location = locationManager.getLastKnownLocation(provider); 

     // Initialize the location fields 

     flag = displayGpsStatus(); 
     if (flag) { 

     if (location != null) { 
      System.out.println("Provider " + provider + " has been selected."); 
      onLocationChanged(location); 


      if((lat==12.905478)&&(lng==80.093358)) 
     { 
      mobilemode.setRingerMode(AudioManager.RINGER_MODE_VIBRATE); 

      Toast.makeText(getBaseContext(),"VIBRATE profile activated ",Toast.LENGTH_SHORT).show(); 



     } 
     else if ((lat==12.90080625)&&(lng==80.09210655)) 
     { 
      mobilemode.setRingerMode(AudioManager.RINGER_MODE_SILENT); 





      Toast.makeText(getBaseContext(),"SILENT profile activated !",Toast.LENGTH_SHORT).show(); 
      //notification.setLatestEventInfo(ShowLocationActivity.this, "changed to silent mode", "because u r in office", pendingIntent); 
       // notificationManager.notify(i, notification); 
     } 
     else 
     { 
      mobilemode.setRingerMode(AudioManager.RINGER_MODE_NORMAL); 

      Toast.makeText(getBaseContext(),"LOUD profile activated !",Toast.LENGTH_SHORT).show(); 
     } 



     } 




     else { 
      latituteField.setText("Location not available"); 
      longitudeField.setText("Location not available"); 
     } 
    } 
     else { 
      alertbox("Gps Status!!", "Your GPS is: OFF"); 
     } 


    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.location, menu); 
     return true; 
    } 

    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle item selection 
     switch (item.getItemId()) { 
      case R.id.menu_settings: 
       Intent intent = new Intent(ShowLocationActivity.this,SetPreference.class); 
       startActivityForResult(intent, 0); 
       checkPref(); 
       return true; 

      default: 
       return super.onOptionsItemSelected(item); 
      } 








     } 

     private void checkPref(){ 

      SharedPreferences myPref 

      = PreferenceManager.getDefaultSharedPreferences(ShowLocationActivity.this); 

      String _pref = 

        "Option 1: " + myPref.getBoolean("pref_opt1", true); 


     } 



     @Override 

     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

      // TODO Auto-generated method stub 

      super.onActivityResult(requestCode, resultCode, data); 

      checkPref(); 

     } 
    @Override 
    public void onLocationChanged(Location location) { 
     // TODO Auto-generated method stub 
     lat = (double) (location.getLatitude()); 
     lng = (double) (location.getLongitude()); 
     latituteField.setText(String.valueOf(lat)); 
     longitudeField.setText(String.valueOf(lng)); 


    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 
     Toast.makeText(this, "Disabled provider " + provider, 
        Toast.LENGTH_SHORT).show(); 

    } 

    @Override 
    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub 
     Toast.makeText(this, "Enabled new provider " + provider, 
       Toast.LENGTH_SHORT).show(); 

    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub 

    } 
    @Override 
    protected void onResume() { 
     super.onResume(); 
     locationManager.requestLocationUpdates(provider, 400, 1, this); 
     } 


     @Override 
     protected void onPause() { 
     super.onPause(); 
     locationManager.removeUpdates(this); 
     } 

     public void rrr(View v) 
     { 

      DownloadTask n= new DownloadTask(); 
      n.doInBackground(); 
     } 
     public void onDestroy() 
     { 
      super.onDestroy(); 
      Log.v("hhh","on destroy"); 
      DownloadTask n= new DownloadTask(); 
      n.doInBackground(); 
     } 

     public Boolean displayGpsStatus() { 
      ContentResolver contentResolver = getBaseContext().getContentResolver(); 
      boolean gpsStatus = Settings.Secure.isLocationProviderEnabled(
        contentResolver, LocationManager.GPS_PROVIDER); 
      if (gpsStatus) { 
       return true; 

      } else { 
       return false; 
      } 
     } 

     /*----------Method to create an AlertBox ------------- */ 
     protected void alertbox(String title, String mymessage) { 
      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setMessage("Your Device's GPS is Disable") 
        .setCancelable(false) 
        .setTitle("** Gps Status **") 
        .setPositiveButton("Gps On", 
          new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, int id) { 
            // finish the current activity 
            // AlertBoxAdvance.this.finish(); 
            Intent myIntent = new Intent(
              Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
            startActivity(myIntent); 
            dialog.cancel(); 
           } 
          }) 
        .setNegativeButton("Cancel", 
          new DialogInterface.OnClickListener() { 
           public void onClick(DialogInterface dialog, int id) { 
            // cancel the dialog box 
            dialog.cancel(); 
           } 
          }); 
      AlertDialog alert = builder.create(); 
      alert.show(); 
     } 


    public class DownloadTask extends AsyncTask<Integer, Integer, Void> { 



     @Override 
     protected Void doInBackground(Integer... params) { 


      Log.v("hhh","back"); 
      onCreate(null); 
      // onLocationChanged(location); 
      /* 
      lat = (double) (location.getLatitude()); 
      lng = (double) (location.getLongitude()); 
      latituteField.setText(String.valueOf(lat)); 
      longitudeField.setText(String.valueOf(lng)); 

      if (location != null) { 
        System.out.println("Provider " + provider + " has been selected."); 
        onLocationChanged(location); 


        if((lat==12.905478)&&(lng==80.093358)) 
       { 
        mobilemode.setRingerMode(AudioManager.RINGER_MODE_VIBRATE); 

        Toast.makeText(getBaseContext(),"VIBRATE profile activated ",Toast.LENGTH_SHORT).show(); 



       } 
       else if ((lat==12.90080625)&&(lng==80.09210655)) 
       { 
        mobilemode.setRingerMode(AudioManager.RINGER_MODE_SILENT); 





        Toast.makeText(getBaseContext(),"SILENT profile activated !",Toast.LENGTH_SHORT).show(); 
        //notification.setLatestEventInfo(ShowLocationActivity.this, "changed to silent mode", "because u r in office", pendingIntent); 
         // notificationManager.notify(i, notification); 
       } 
       else 
       { 
        mobilemode.setRingerMode(AudioManager.RINGER_MODE_NORMAL); 

        Toast.makeText(getBaseContext(),"LOUD profile activated !",Toast.LENGTH_SHORT).show(); 
       } 



       } 




       else { 
        latituteField.setText("Location not available"); 
        longitudeField.setText("Location not available"); 
       } 






      // TODO Auto-generated method stub 


     */ 
      return null; 
     } 
} 
} 
+3

Componente Android de usuario llamado [Servicio] (http://developer.android.com/reference/android/app/Service.html) – Lucifer

+0

Esta pregunta puede responder a lo que está buscando http://stackoverflow.com/questions/5240246/broadcastreceiver-for-location –

Respuesta

11

ha codificado en la actividad, le sugiero que lo cambió a Android Service. Un servicio es un componente que se ejecuta en segundo plano, sin interactuar con el usuario.

Eche un vistazo a Service Example de Vogella.

Simplemente convierta su código de actividad en un servicio de Android y funcionará en segundo plano sin ninguna GUI.

+1

sí, el método de servicio funciona. Pero también debemos usar receptores de difusión amplia para enviar actualizaciones sobre la ubicación del servicio a la actividad – Ruban

+1

, incluso si eso también se puede ejecutar en segundo plano. yo hago lo mismo – Lucifer

Cuestiones relacionadas