Salut a toute la communauté SDZ. je suis confronte a une erreur d’exécution que je ne comprends puisque je débute dans le domaine . mon application ne me renvoi pas les coordonnées demandées. voici l'erreur en question :
[2013-05-13 09:29:29 - MonPremierService] ------------------------------ [2013-05-13 09:29:29 - MonPremierService] Android Launch! [2013-05-13 09:29:29 - MonPremierService] adb is running normally. [2013-05-13 09:29:29 - MonPremierService] Performing com.locartion.service.HomeActivity activity launch [2013-05-13 09:29:30 - MonPremierService] Automatic Target Mode: launching new emulator with compatible AVD 'andoid' [2013-05-13 09:29:30 - MonPremierService] Launching a new emulator with Virtual Device 'andoid' [2013-05-13 09:29:40 - Emulator] Failed to create Context 0x3005 [2013-05-13 09:29:40 - Emulator] could not get wglGetExtensionsStringARB [2013-05-13 09:29:40 - Emulator] could not get wglGetExtensionsStringARB [2013-05-13 09:29:40 - Emulator] could not get wglGetExtensionsStringARB [2013-05-13 09:29:40 - Emulator] could not get wglGetExtensionsStringARB [2013-05-13 09:29:40 - Emulator] could not get wglGetExtensionsStringARB [2013-05-13 09:29:40 - Emulator] could not get wglGetExtensionsStringARB [2013-05-13 09:29:40 - Emulator] could not get wglGetExtensionsStringARB [2013-05-13 09:29:40 - Emulator] could not get wglGetExtensionsStringARB [2013-05-13 09:29:40 - Emulator] emulator: WARNING: Could not initialize OpenglES emulation, using software renderer. [2013-05-13 09:29:43 - MonPremierService] New emulator found: emulator-5554 [2013-05-13 09:29:43 - MonPremierService] Waiting for HOME ('android.process.acore') to be launched... [2013-05-13 09:30:48 - MonPremierService] HOME is up on device 'emulator-5554' [2013-05-13 09:30:48 - MonPremierService] Uploading MonPremierService.apk onto device 'emulator-5554' [2013-05-13 09:30:59 - MonPremierService] Failed to install MonPremierService.apk on device 'emulator-5554': timeout [2013-05-13 09:30:59 - MonPremierService] Launch canceled! [2013-05-13 10:08:44 - MonPremierService] ------------------------------ [2013-05-13 10:08:44 - MonPremierService] Android Launch! [2013-05-13 10:08:44 - MonPremierService] adb is running normally. [2013-05-13 10:08:44 - MonPremierService] Performing com.locartion.service.HomeActivity activity launch [2013-05-13 10:08:45 - MonPremierService] Automatic Target Mode: launching new emulator with compatible AVD 'andoid' [2013-05-13 10:08:45 - MonPremierService] Launching a new emulator with Virtual Device 'andoid' [2013-05-13 10:08:55 - Emulator] could not get wglGetExtensionsStringARB [2013-05-13 10:08:55 - Emulator] could not get wglGetExtensionsStringARB [2013-05-13 10:08:55 - Emulator] could not get wglGetExtensionsStringARB [2013-05-13 10:08:55 - Emulator] could not get wglGetExtensionsStringARB [2013-05-13 10:08:55 - Emulator] could not get wglGetExtensionsStringARB [2013-05-13 10:08:55 - Emulator] could not get wglGetExtensionsStringARB [2013-05-13 10:08:55 - Emulator] could not get wglGetExtensionsStringARB [2013-05-13 10:08:55 - Emulator] Failed to create Context 0x3005 [2013-05-13 10:08:55 - Emulator] emulator: WARNING: Could not initialize OpenglES emulation, using software renderer. [2013-05-13 10:08:55 - Emulator] could not get wglGetExtensionsStringARB [2013-05-13 10:08:57 - MonPremierService] New emulator found: emulator-5554 [2013-05-13 10:08:57 - MonPremierService] Waiting for HOME ('android.process.acore') to be launched... [2013-05-13 10:09:42 - MonPremierService] HOME is up on device 'emulator-5554' [2013-05-13 10:09:42 - MonPremierService] Uploading MonPremierService.apk onto device 'emulator-5554' [2013-05-13 10:09:43 - MonPremierService] Installing MonPremierService.apk... [2013-05-13 10:10:02 - MonPremierService] Success! [2013-05-13 10:10:03 - MonPremierService] Starting activity com.locartion.service.HomeActivity on device emulator-5554 [2013-05-13 10:10:06 - MonPremierService] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.locartion.service/.HomeActivity }
voici le code de ma classe service :
package com.locartion.service;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.widget.Toast;
public class MonPremierService extends Service {
Criteria criteria = null ;
private LocationManager locationMgr = null;
private LocationListener onLocationChange = new LocationListener()
{
@Override
public void onStatusChanged(String provider, int status, Bundle extras)
{
}
@Override
public void onProviderEnabled(String provider)
{
}
@Override
public void onProviderDisabled(String provider)
{
}
@Override
public void onLocationChanged(Location location)
{
Double latitude = location.getLatitude();
Double longitude = location.getLongitude();
Double altitude = location.getAltitude() ;
Float precision = location.getAccuracy() ;
Toast.makeText(getBaseContext(),"Voici les coordonnées de votre téléphone : " + latitude + " " + longitude, Toast.LENGTH_LONG).show();
Toast.makeText(getBaseContext(),"Voici les coordonnes de votre telephone : " + altitude + " " + precision , Toast.LENGTH_LONG).show();
}
};
@Override
public IBinder onBind(Intent arg0)
{
return null;
}
@Override
public void onCreate()
{
locationMgr = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
criteria = new Criteria() ;
criteria.setAccuracy(Criteria.ACCURACY_FINE) ;
criteria.setAltitudeRequired(true);
criteria.setBearingRequired(true);
criteria.setCostAllowed(false);
criteria.setPowerRequirement(Criteria.POWER_MEDIUM);
criteria.setSpeedRequired(true);
locationMgr.requestLocationUpdates(locationMgr.getBestProvider(criteria, true) ,100, 1, onLocationChange);
locationMgr.requestLocationUpdates(locationMgr.getBestProvider(criteria, true), 100, 1,onLocationChange);
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy()
{
super.onDestroy();
locationMgr.removeUpdates(onLocationChange);
}
}
A Vaincre sans péril on finit par triompher sans gloire -> le Cid de corneille
public class LocationListenerService extends Service implements LocationListener{
private static final String LOGTAG = "LocationListenerService";
private LocationManager manager;
private Location location;
private final IBinder binder = new TrackerBinder();
// Si on veut stocker toutes les locations : ArrayList<Location> storedLocation = new ArrayList<Location>();
private boolean isTracking = false;
public Location getLocation(){
return location;
}
@Override
public void onCreate(){
manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Log.i(LOGTAG, "Tracking Service Running...");
}
@Override
public void onDestroy() {
manager.removeUpdates(this);
Log.i(LOGTAG, "Tracking Service Stopped...");
}
/**
* On commence le tracking
*/
public void startTracking(){
//On verifie si le GPS est allume sinon cela n'a aucun sens
if(!manager.isProviderEnabled(LocationManager.GPS_PROVIDER))
return;
Toast.makeText(this, "Debut du tracking", Toast.LENGTH_SHORT).show();
manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000L, 0f, this);
isTracking = true;
}
/**
* On stoppe le tracking
*/
public void stopTracking(){
Toast.makeText(this, "Fin du tracking", Toast.LENGTH_SHORT).show();
manager.removeUpdates(this);
isTracking = false;
}
public boolean isTracking(){
return isTracking;
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return binder;
}
/**
* Appelé lorsque l'emplacement a changé.
*
* @param location un nouvel emplacement, defini comme un objet Location.
*/
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
this.location = location;
}
/**
* Appelée lors d'un changement d'état de fournisseur. Cette méthode est appelée quand un fournisseur
* est incapable de chercher un endroit ou si le fournisseur
* est récemment devenu disponible après une période d'indisponibilité.
*
* @param le nom du fournisseur d'emplacement associé à cette mise à jour.
*
* @param status {@link LocationProvider#OUT_OF_SERVICE} si le fournisseur est hors service,
* ce qui ne devrait pas changer dans un avenir proche ;{@link LocationProvider#TEMPORARILY_UNAVAILABLE}
* si le fournisseur est temporairement indisponible mais devrait être disponible sous peu;
* et {@link LocationProvider#AVAILABLE} si le fournisseur est actuellement disponible.
*
* @param extras un Bundle option qui contiendra les variables d'état spécifiques du fournisseur.
*
*/
@Override
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
location = null;
}
/**
* Appelé lorsque le prestataire est activé par l'utilisateur.
*
* @param provider le nom du fournisseur d'emplacement associé à cette mise à jour.
*/
@Override
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
/**
* Appelé lorsque le fournisseur est désactivée par l'utilisateur.
* Si requestLocationUpdates est appelée sur un fournisseur déjà désactivé,
* cette méthode est appelée immédiatement.
*
* @param provider le nom du fournisseur d'emplacement associé à cette mise à jour.
*/
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
if(status == LocationProvider.OUT_OF_SERVICE || status == LocationProvider.TEMPORARILY_UNAVAILABLE)
{
location = null;
}
}
/**
* La plupart des développeurs ne vont pas implémenter cette classe directement,
* en utilisant plutôt l'outil AIDL pour décrire l'interface désirée,
* présentant qu'elle génère la sous-classe Binder approprié.
* Vous pouvez, toutefois, tirer directement de Binder pour mettre en œuvre votre propre protocole
* RPC personnalisé ou tout simplement instancier un objet Binder brut directement pour
* l'utiliser comme un jeton qui peut être partagée entre les processus.
*/
public class TrackerBinder extends Binder{
public LocationListenerService getService(){
return LocationListenerService.this;
}
}
}
Et dans l'activity
//onCreate
serviceIntent = new Intent(this, LocationListenerService.class);
getApplicationContext().startService(serviceIntent);
getApplicationContext().bindService(serviceIntent, serviceConnection, Context.BIND_AUTO_CREATE);
@Override
public void onStop(){
super.onStop();
if(listenerService !=null){
listenerService.stopTracking();
if(!listenerService.isTracking()) {
getApplicationContext().stopService(serviceIntent);
}
getApplicationContext().unbindService(serviceConnection);
}
finish();
}
/**
* Interface pour surveiller l'état d'un service applicatif
*/
private ServiceConnection serviceConnection = new ServiceConnection() {
/**
* Appelé lorsque la connexion au service a été mis en place,
* avec le IBinder du canal de communication au service.
*
* @param className le ComponentName du service qui a ete connecte
* @param service Le IBinder du canal de communication du service,
* que vous pouvez maintenant faire des appels dessus.
*/
public void onServiceConnected(ComponentName className, IBinder service) {
listenerService = ((LocationListenerService.TrackerBinder)service).getService();
listenerService.startTracking();
}
/**
* Appelé lorsqu'une connexion au service a été perdue. Cela se produit généralement lorsque le
* processus qui héberge le service s'est écrasé ou a été tué. Cela ne supprime pas le
* ServiceConnection lui-même - cette liaison pour le service restera actif, et vous recevrez un
* appel au moment où le service est de nouveau en run.
*
* @param className le ComponentName du service qui a ete deconnecte
*/
public void onServiceDisconnected(ComponentName className) {
listenerService = null;
}
Merci . je vais essayer d’épouser ta logique de développement même si je ne suis encore qu'un débutant
A Vaincre sans péril on finit par triompher sans gloire -> le Cid de corneille
erreur d'execution incomprehensible
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.