arrêter le gps lors de la sortie de l'app
Ok, j'ai essayé de Nicolas solution mais toujours obtenir la force de fermeture si j'appuie sur le bouton de retour que l'application recherche des coordonnées gps.donc, je m téléchargement de tous les codes et les fichiers(à l'exception de l'icône.png et un stylo.png dans un drawable) pour le projet...de sorte qu'il est possible qu'à copier coller le code à partir d'ici pour voir ce qui se passe. mon main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/icon"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<Button android:text="Start"
android:id="@+id/Button01"
android:layout_width="120px"
android:layout_height="70px"
android:layout_gravity = "center_horizontal"
android:textSize="20px"
android:layout_marginTop="150px"
android:clickable="true"
></Button>
</LinearLayout>
à côté de mon activité principale(GpsLocEx.java)
package com.example.gpslocex;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class GpsLocEx extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button start = (Button) findViewById(R.id.Button01);
start.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent map = new Intent(view.getContext(), com.example.gpslocex.ShowMap.class);
startActivityForResult(map, 0);
}
});
}
}
à côté de mon gps.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainlayout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<com.google.android.maps.MapView
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:apiKey="06ZLf-HkdkRMb513KS2ZRljmMQL0bntlyMJ-rOQ"
/>
</RelativeLayout>
prochaine ShowMap.java
package com.example.gpslocex;
import java.util.List;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Point;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import com.google.android.maps.GeoPoint;
import com.google.android.maps.MapActivity;
import com.google.android.maps.MapController;
import com.google.android.maps.MapView;
import com.google.android.maps.Overlay;
public class ShowMap extends MapActivity {
private MapController mapController;
private MapView mapView;
private LocationManager locationManager;
private GeoUpdateHandler geoUpdateHandler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gps);
mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mapView.setSatellite(true);
mapController = mapView.getController();
mapController.setZoom(14); //Zoom 1 is world view
geoUpdateHandler = new GeoUpdateHandler();
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
createGpsDisabledAlert();
} else {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0,
0,geoUpdateHandler);
}
}
private void createGpsDisabledAlert() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder
.setMessage(
"Your GPS is disabled! Would you like to enable it?")
.setCancelable(false).setPositiveButton("Enable GPS",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
showGpsOptions();
}
});
builder.setNegativeButton("Do nothing",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog alert = builder.create();
alert.show();
}
private void showGpsOptions() {
Intent gpsOptionsIntent = new Intent(
android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(gpsOptionsIntent);
}
@Override
protected boolean isRouteDisplayed() {
//TODO Auto-generated method stub
return false;
}
public class GeoUpdateHandler implements LocationListener {
@Override
public void onLocationChanged(Location location) {
int lat = (int) (location.getLatitude() * 1E6);
int lng = (int) (location.getLongitude() * 1E6);
GeoPoint point = new GeoPoint(lat, lng);
mapController.animateTo(point); // mapController.setCenter(point);
MapOverlay mapOverlay = new MapOverlay();
mapOverlay.setPointToDraw(point);
List<Overlay> listOfOverlays = mapView.getOverlays();
listOfOverlays.clear();
listOfOverlays.add(mapOverlay);
}
@Override
public void onProviderDisabled(String provider) {
//TODO Auto-generated method stub
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
}
class MapOverlay extends Overlay
{
private GeoPoint pointToDraw;
public void setPointToDraw(GeoPoint point) {
pointToDraw = point;
}
public GeoPoint getPointToDraw() {
return pointToDraw;
}
@Override
public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) {
super.draw(canvas, mapView, shadow);
//convert point to pixels
Point screenPts = new Point();
mapView.getProjection().toPixels(pointToDraw, screenPts);
//add marker
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.pen);
canvas.drawBitmap(bmp, screenPts.x, screenPts.y - 128, null);
return true;
}
}
@Override
public void onPause() {
locationManager.removeUpdates(geoUpdateHandler);
}
}
prochaine strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Version-1.0</string>
<string name="app_name">GpsLocEx</string>
</resources>
Enfin AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.gpslocex"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<uses-library android:name="com.google.android.maps" />
<activity android:name=".GpsLocEx"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ShowMap"></activity>
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="ACCESS_COARSE_LOCATION" />
</manifest>
OriginalL'auteur kzs | 2011-05-25
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le Android du cycle de vie des méthodes pour éteindre le GPS lorsque le
Activity
est plus sur le dessus.Utilisation onPause(), onStop(), ou onDestroy() pour supprimer les mises à jour à partir de votre locationManager. Quelque chose comme ceci:
EDIT:
Vous avez une ClassCastException dans votre
onPause()
méthode. Vous ne pouvez pas convertirthis
(votreActivity
) à unLocationListener
(au moins pas sans faire votreActivity
mettre en œuvreLocationListener
).Dans votre code, vous créez un
new GeoUpdateHandler()
. Tout d'abord, vous devez créer un instanceVariable qui est votre GeoUpdateHandler. En dessous de votre variable d'instance pourLocationManager
, créez-en un comme ceci:Vous devez garder une poignée dans le onCreate() méthode:
Et puis dans le onPause, passer le
geoUpdateHandler
à la removeUpdates fonction:EDIT 2:
La stacktrace dit tout:
Appel par l'intermédiaire de super.onPause() dans votre onPause()
Vous pourriez peut-être modifier votre question avec le stacktrace de la force de fermeture.
salut j'ai édité ma question avec le logcat messages au cours de la force de fermeture...
J'ai mis à jour ma réponse avec l'aide supplémentaire pour vous...
nichlos merci beaucoup..mais le problème demeure...pour votre confort, j'ai téléchargé tous les fichiers de projet à l'exception de stylo.images png et icone.png dans un drawable dossier...de bien vouloir prendre un coup d'oeil ci-dessus..
OriginalL'auteur nicholas.hauschild
Essayer cette
locationManager.removeUpdates(myLocationListener);
Vous devriez écrire dans onPause()
Cela va désactiver le GPS lors de votre sortie de votre application .
quelle est l'erreur que vous obtenez. pouvez-vous svp collez ici???
sujit je m obtenir la force de fermeture sur mon HTC...
sujit j'ai posté ci-dessus..le logcat messages
onPause est appelée uniquement dans le contexte d'une Activité, il peut ou peut ne pas signifier que la demande a été backgrounded.
OriginalL'auteur Sujit