Possible Duplicate:
how to run application in background in android?
i am doing project using location manager if my location latitude and longitude equal to the same which is in database mobile profile should go to silent mode.so i need to keep on update my location using location manager.i did it .but if i close my app it's not working. but my app should be working even though i close my app.i tried with async task its working when i close the app but after i switch to loud mode manually it's not changing to silent.i should also get notified when my app runs n background..please help.tks in advance
here is my code
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;
}
}
}
You have coded in Activity, I suggest you to changed it to Android Service. A Service is a component which runs in the background, without interacting with the user.
Have a look at Vogella's Service Example.
Just Convert your Activity code into Android Service and it will work in background without any GUI.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With