Problemas obter Localização Motorola Defy + (MB526) [Resolvido]

Beleza pessoal?

Estou com um problema com a programação para Motorola Defy+ (MB526).

Estou criando um aplicativo de publicidade. Ele deve mostrar a localização do usuário no mapa e pontos de interesse do usuário.

Conforme a documentação do Android eu criei o meu Listenner e acrescentei um Overlay com a minha localização, em todos os outros dispositivos Android que testei minha aplicação funciona bem, incluindo o telefone Motorola Defy (MB525), modelo anterior ao (MB526), aparentemente neste aparelho ele não recebe uma coordenada diferente da ultima coordenada coletada.

Para teste separei todo o resto da minha aplicação e deixei somente a parte do MAPA, segue o código abaixo dos testes que também apresentaram o mesmo erro no Defy+.


public class TesteMapActivity extends MapActivity {

	private LocationManager locationManager;

	@Override
	protected boolean isRouteDisplayed() {
		return false;
	}
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

		Criteria criteria = new Criteria();

		criteria.setAccuracy(Criteria.ACCURACY_COARSE);
		criteria.setAltitudeRequired(false);
		criteria.setCostAllowed(true);
		criteria.setPowerRequirement(Criteria.POWER_LOW);

		String provider = locationManager.getBestProvider(criteria, true);

		locationManager.requestLocationUpdates(provider, 0, 0, locationListener);

		MapView mapView = (MapView) findViewById(R.id.mapview);
		MapController mapController = mapView.getController();
		mapView.setSatellite(false);
		mapView.setStreetView(false);
		mapView.setBuiltInZoomControls(true);

		mapController.setZoom(16);
	}

	private LocationListener locationListener = new LocationListener() {

		int i = 0;

		@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) {
			i++;
			animeTo(location, i);
		}
	};

	public void animeTo(Location location, int i) {
		TextView txtCoordenadas = (TextView) findViewById(R.id.txtCoordenadas);

		txtCoordenadas.setText(i + " " + location.getLatitude() + ", " + location.getLongitude());

		MapView mapView = (MapView) findViewById(R.id.mapview);
		MapController mapController = mapView.getController();

		if (mapView.getOverlays().size() >= 1) {
			mapView.getOverlays().removeAll(mapView.getOverlays());
		}

		List<Overlay> mapOverlays = mapView.getOverlays();
		Drawable drawable = getResources().getDrawable(R.drawable.ponto);
		OtemizedOverlay itemizedoverlay = new OtemizedOverlay(drawable, TesteMapActivity.this);

		Double lat = location.getLatitude() * 1E6;
		Double log = location.getLongitude() * 1E6;

		GeoPoint point = new GeoPoint(lat.intValue(), log.intValue());
		OverlayItem overlayitem = new OverlayItem(point, "Minha Localização", "Latitude: " + lat + " Longitude: " + log);

		itemizedoverlay.addOverlay(overlayitem);
		mapOverlays.add(itemizedoverlay);

		mapController.animateTo(point);
	}
}
public class OtemizedOverlay extends ItemizedOverlay<OverlayItem> {
	private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
	private Context mContext;
	
	public OtemizedOverlay(Drawable defaultMarker) {
		super(boundCenterBottom(defaultMarker));
	}

	public void addOverlay(OverlayItem overlay) {
		mOverlays.add(overlay);
		populate();
	}

	@Override
	protected OverlayItem createItem(int i) {
		return mOverlays.get(i);
	}

	@Override
	public int size() {
		return mOverlays.size();
	}

	public OtemizedOverlay(Drawable defaultMarker, Context context) {
		super(boundCenterBottom(defaultMarker));
		mContext = context;
	}

	@Override
	protected boolean onTap(int index) {
		OverlayItem item = mOverlays.get(index);
		AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
		dialog.setTitle(item.getTitle());
		dialog.setMessage(item.getSnippet());
		dialog.show();
		return true;
	}
}

Alguém pode me ajudar, ou dar uma dica se como proceder? Lancei a dúvida no Forum de desenvolvedor da Motorola, porém ninguém responde.

Caros amigos do Guj,

Encontrei a solução para o problema e não graças a ninguém deste forum. É engraçado como o pessoal do Grupo de Úsuarios Java (muitos aqui nem sabem o que significa GUJ) se presta a responder todas as perguntas simples, mas quando é uma pergunta que leva tempo e conhecimento agudo de algo, ninguém se dignifica a ajudar, e é facil responder perguntas como "Coloque seu código enter as Tags code". Ou o melhor livro de Android é o do Lecheta.

As pessoas deviam se preocupar mais em ajudar os outros do que ficarem tão preocupadas em falar que o post esta repetido e que o código não está entre tags. 

De que adianta ser Smalltalk, JavaBaby, Debbuger, HelloWorld, Entusiasta Java.

Se preocupem em ajudar as pessoas que precisam. Este é o maior forum brasileiro de Java e o que o povo menos se ajuda. A cada 30 que faz uma pergunta realmente coerente somente 1 recebe a resposta e geralmente quando não precisa mais dela.

A solução para este problema é simples, alguns aparelhos incluso o Defy+ tem um problema de configuração, que pode sem verificado no link http://forum.xda-developers.com/showthread.php?t=1458285 (este que por ventura, é um forum DE VERDADE) mais para quem esta desenvolvendo uma aplicação e não pode deixar o Defy+ de fora, existe um Workaround a fazer que soluciona o problema. Onde chamamos o metodo animeTo(location) transforme este metodo em uma AsyncTask(). 

Ex.

new AsyncTask() {
			protected Object doInBackground(Object... params) {

				//seu codigo 
				return null;
			}
		}.execute(new Void[0]);

Deixo claro aqui a resposta para a mesma pergunta que eu fiz e ninguém, nem os “mamãe fiz 80% na Certificação SCJP/OCJP” ou “Arquiteto de soluções ultrafodônicas” tiveram sequer a capacidade de pensar e/ou dizer “cara, vc tá sozinho nesta. Realmente eu nao sei, mas se conseguir posta pra gente ter uma referência”. Perguntas “Como crio uma classe?” ou “Posso herdar isto?” na minha opinião deveriam ser separadas das questões mais complexas… porque se a parada é configurar eclipse ou até rodar um HelloWorld até um Junior de DotNet acostumado a criar DBs e/ou até apps Windows Phone consegue fazer.

:smiley: Curti a ideia!

Não acredito como um simples garoto gringo no Stackoverflow conseguiu dar uma luz enquanto aqui no GUJ, se passar de MapView e Threads em android se perdem todo.

A parada tá feia pro nosso lado

É verdade,

Parei de usar o GUJ a bastante tempo, voltei pra dar uma olhada e vi este post. Realmente as pessoas não se importam com problemas mais complexos.

Os usuários são classificados como Smalltalk, JavaBaby, Debbuger, HelloWorld, Entusiasta Java - De acordo com a quantidade de respostas medíocres que postam e não por mérito.

Ter SCJP/OCJP até eu que só mexo com C++/C#/HTML5+JS

mimimimi

Ninguém e obrigado a te ajudar meu amigo.

O GUJ não é suporte pago.

E qualquer desenvolvedor que se preste acaba procurando a solução em vários lugares mesmo, não fica parado reclamando que ninguém o ajuda.

Ou seja, não sabem.

andreiribas,

  Parabéns mais uma resposta idiota para acrescer seu status no GUJ.

Duas agora.

E você já está com 20 inúteis.

Parabéns.

Placar:
Eicriolo 20 X Andreiribas 486.

Eicriolo ainda tem chances, porém remotas. Para ser mais medíocre terá que alcançar os números exorbitantes, e conseguir um rótulo de “SCJP 6.0
OCE JSP and Servlet Developer, JEE 6”.

Como falei, certificado é facil. Quero ver é largar a prostituição e ter senso de comunidade.

Sé ao invés de reclamar vocês respondessem as respostas que estão em aberto aí no fórum, já fariam alguma diferença.

Responder o que? Qual a melhor apostila Android?
Deixo esse papo torto com vcs mesmo…