Titanium, criando uma intent no OS Android

Pessoal, nesse tutorial vou mostrar como é simples criar uma “intent” do Android pelo Titanium e iniciar a “activity” através da “intent“.

Vamos supor que eu preciso acessar o recurso de geolocalização do device do usuário. Para acessar esse recurso pelo Titanium é bem simples, basta verificar se o serviço de geolocalização esta ativa no device acessando a propriedade: Ti.Geolocation.locationServicesEnabled. Para saber mais acesse aqui.
Ao verificar a propriedade, se ela estiver desativada retornando “false“, você não vai conseguir capturar a latitude e a longitude referente a posição do device. Como o serviço esta desativado, você pode informar o usuário através de um “alert“, para que ele ative o serviço de geolocalização e volte ao app. Mas lidar com o usuário é complicado, pois alguns não vão nem saber como habilitar esse serviço e você como desenvolvedor tem que tentar facilitar esse trabalho ao máximo no aplicativo que você estiver desenvolvendo.

Hora de botar a mão na massa! Criei um projeto clássico no Titanium apenas com foco no Android. No arquivo “app.js”, vamos criar uma window e um button, no button vou adicionar um evento de “click” para verificar se a geolocalização esta ativa. Se estiver ativa vou mostar a latitude e a longitude onde o device se encontra, senão, por agora vou exibir um alerta informando o usuário que a geolocalização está desativada.

//criando uma função anônima
( function(){
    var win = Ti.UI.createWindow({
		backgroundColor:'#fff'
	});

	var buttonShowLocation = Ti.UI.createButton({
		title:'show location',
		width:140,
		height:80
	});
	win.add( buttonShowLocation );

        buttonShowLocation.addEventListener( 'click', clickButtonShowLocation );
	function clickButtonShowLocation (e)
	{
		// verificando se geolocalização está ativa
		if( Ti.Geolocation.locationServicesEnabled )
		{
                        //define a precisão requerida da geolocalização
			Ti.Geolocation.accuracy = Ti.Geolocation.ACCURACY_BEST;

			// caso a geolocalização esteja ativa tente capturar a posição do device
			// o método getCurrentPosition, recebe como parâmetro uma função de callback
			// Caso "e.success" seja verdadeiro é mostrado um alerta com a latitude e longitude
			// que o device se encontra. Senão, é exibido um alerta para o usuário sobre o erro ocorrido
			Ti.Geolocation.getCurrentPosition( function( e ){
				if ( e.success )
				{
					alert( 'latitude: ' + e.coords.latitude + ' longitude: ' + e.coords.longitude );
				}
				else
				{
					alert( 'Error get current position:' + e.error );
				}
			});
		}
		else
		{
			alert( 'GPS disabled.' );
		}

	}

} )();

Vou executar esse exemplo direto no meu nexus e printar aqui os resultados com a geolocalização ativada e desativada.

GPS desativado

GPS desativado

GPS ativado

GPS ativado

Agora, ao invés de mostar um “alert” ao usuário que o serviço de geolocalização está desativado, vamos abrir a tela específica do Android para que ele consiga habilitar o serviço de GPS.

Basta comentar a linha 40 e adicionar o seguinte trecho de código.

var intent = Ti.Android.createIntent({
	action:"android.settings.LOCATION_SOURCE_SETTINGS"
});
Ti.Android.currentActivity.startActivity( intent );

Ao testar o exemplo e ele estiver com o gps desativado, e você clicar no botão, a tela que deve aparecer deve ser semelhante ao print abaixo.
IMG_20140413_224834

Segue o código completo.


( function(){

	var win = Ti.UI.createWindow({
		backgroundColor:'#fff'
	});

	var buttonShowLocation = Ti.UI.createButton({
		title:'show location',
		width:140,
		height:80
	});
	win.add( buttonShowLocation );

	buttonShowLocation.addEventListener( 'click', clickButtonShowLocation );

	function clickButtonShowLocation (e)
	{
		// verificando se geolocalização está ativa
		if( Ti.Geolocation.locationServicesEnabled )
		{
                        //define a precisão requerida da geolocalização
			Ti.Geolocation.accuracy = Ti.Geolocation.ACCURACY_BEST;
			// caso a geolocalização esteja ativa tenta capturar a posição do device
			// o método getCurrentPosition, recebe como parâmetro uma função de callback
			// Caso "e.success" seja verdadeiro é mostrado um alerta com a latitude e longitude
			// que o device se encontra. Senão, é exibido um alerta o usuário sobre o erro ocorrido
			Ti.Geolocation.getCurrentPosition( function( e ){
				if ( e.success )
				{
					alert( 'latitude: ' + e.coords.latitude + ' longitude: ' + e.coords.longitude );
				}
				else
				{
					alert( 'Error get current position:' + e.error );
				}
			});
		}
		else
		{
			//alert( 'GPS disabled.' );

			var intent = Ti.Android.createIntent({
				action:"android.settings.LOCATION_SOURCE_SETTINGS"
			});
			Ti.Android.currentActivity.startActivity( intent );

		}

	}

	//open window
	win.open();

} )();

Você pode abrir qualquer janela do OS Android, basta definir a “action” certa. Para abrir as definições de rede wifi, altere a “action” do nosso exemplo para a linha abaixo.

action:"android.settings.WIFI_SETTINGS"

Veja o vídeo de exemplo que demonstra o código desse exemplo em execução.

Qualquer dúvida ou sugestão, poste um comentário.

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>