File Chooser, Color Picker e Photo Picker no Android!

Neste post vou dar uma dica interessante sobre o site. Neste site o desenvolvedor consegue encontrar milhares de projetos com o código aberto. De modo que as soluções empregadas estão a disposição para serem usadas nos seus próprios softwares. Então, quando você se deparar com um requisito de software que aparentar ser comum em muitos sistemas, existe grandes chances de você encontrar algo que lhe ajude a implementa-lo no Google Code .

Neste post, utilizarei dois projetos que encontrei no Google Code e me ajudarão com dois problemas.

O primeiro é o projeto Android File Chooser. Esse projeto provê um componente que pode ser integrado ao seu software com o objetivo de encontrar um arquivo que esta dentro do dispositivo e utiliza-lo em sua aplicação. Por exemplo, imagine que você queira recuperar uma foto do seu SDCard e exibi-lo na sua app.
Abaixo segue a imagem do navegador de arquivos que esse componente propícia:

O segundo projeto é o Android Color Picker . Esse projeto é útil em situações onde deseja-se que o usuário escolha uma cor para utilizar na aplicação. Se trata de um componente que aparecerá na forma de um dialog para o usuário e mostrará para o mesmo uma infinidade de cores, de modo que ele escolherá uma. Exemplo de utilização: Imagine que na sua aplicação voce gostaria que o usuário escolhesse a cor de plano de fundo de alguma determinada tela, seria um bom momento para usar esse componente.

Abaixo segue uma imagem de como esse componente vai aparecer na tela:

Android File Chooser

Começaremos pelo Android File Chooser acessando o link do projeto na sessão de downloads Faça o download do projeto e o import para o eclipse (File -> Import).
Com o projeto de biblioteca no eclipse, devemos criar o nosso projeto de exemplo para usar essa biblioteca (File -> New -> other -> Android Application Project).

Com o projeto criado você deve vincula-lo ao projeto biblicoteca que fizemos download. Fazemos isso clicando com o botão direito do mouse em cima do nosso projeto de exemplo, em seguida selecione a opção properties -> Android -> clique no Add no início da tela e escolha as bibliotecas que fizemos download (Esse procedimento também será realizado no Android Color Picker).

O nosso projeto terá uma Activity com dois buttons. O primeiro button chamará o componente Android File Chooser e o segundo chamará Android Color Choose.

O layout da nossa Activity pode ser visto logo abaixo:


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/mainlayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" 
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world"
        tools:context=".MainActivity" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="25dp"
        android:layout_marginTop="55dp"
        android:onClick="onClickColor"
        android:text="Color" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="46dp"
        android:onClick="onClickFile"
        android:text="File" />

</LinearLayout>

Implementaremos primeiro o Android File Chooser, veja que é muito simples. Quando o botão for acionado, a Activity que irá navegar pelo sistema de arquivo será chamada. A partir daí o usuário conseguirá encontrar o arquivo que deseja.
A Activity que será chamada é a FileChooser da própria biblioteca Android File Chooser. Assim como fazemos com todas as Activitys do nosso sistema, everemos informa-la no nosso AndroidManifest.xml.

No final o nosso AndroidManifest.xml ficará assim:


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="br.com.lvc.chooser"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
        <activity
            android:name="br.com.thinkti.android.filechooser.FileChooser"/> 
            
        
    </application>

</manifest>

Chamamos essa activity através do método startActivityForResult, isso significa que a Activity chamada deixará um resultado para a Activity que a chamou. Ou seja, quando a Activity FileChooser terminar (O usuário selecionar um arquivo ou cancelar a pesquisa) receberemos uma String com o caminho do arquivo selecionado. Com essa String poderemos acessar esse arquivo via a classe File e posteriormente poderemos realizar qualquer ação tal como exibir uma imagem que estava no SDCard.
No final do artigo estará o código completo da nossa Activity (com comentários), porém vale a pena destacar nesse momento, a chamada desse componente pelo botão.

                Intent intent = new Intent(this, FileChooser.class);
		ArrayList<String> extensions = new ArrayList<String>();
		/*extensions.add(".pdf");
		extensions.add(".xls");    
		extensions.add(".xlsx"); */
		intent.putStringArrayListExtra("filterFileExtension", extensions);
		startActivityForResult(intent, FILE_CHOOSER);

Android Picker Color

O Android Picker Color é ainda mais simples de ser utilizado que o exemplo anterior. Devemos baixar o projeto do repositório atavés do GIT a url do projeto se encontra no link source do mesmo .

Após baixar o source, devemos vincula-lo ao nosso projeto assim como fizemos com o exemplo Anterior.

Basicamente o que muda nesse exemplo é que desta vez não chamaremos uma Activity e sim um Dialog que se chama AmbilWarnaDialog. Este Dialog recebe como parâmetro para a sua criação um Listener que tratará os eventos do seus buttons.
Como podemos ver na imagem do Picker Color no início do artigo existem dois botões nesse componente o “OK” e o “Cancelar”. A nossa implementação infere que quando o usuário selecionar o botão “Ok” a cor escolhida será a de plano de fundo do nosso App.

Logo abaixo segue o código da Activity que demonstrá os dois componentes:


public class MainActivity extends Activity {
	
	private static final int FILE_CHOOSER =  10;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	public void   onClickColor(View view) {
		AmbilWarnaDialog dialog = new AmbilWarnaDialog(this, android.R.color.darker_gray, new OnAmbilWarnaListener() {
	        @Override
	        public void onOk(AmbilWarnaDialog dialog, int color) {
	        	findViewById(R.id.mainlayout).setBackgroundColor(color);
	        }
	                
	        @Override
	        public void onCancel(AmbilWarnaDialog dialog) {
	                Log.i("COLOR DIALOG", "Cancel Action!");
	        }
	});

	dialog.show();
	}

	public void   onClickFile(View view) {
		Intent intent = new Intent(this, FileChooser.class);
		ArrayList<String> extensions = new ArrayList<String>();
		/* Aqui especificamos as extensões dos arquivos que desejamos encontrar,
		 Assim conseguimos filtrar mais a nossa busca, por exemplo caso queira encontrar uma imagem arquivos 
		 com o formato .doc não serão exibidos.
		 Caso fique em branco todos os arquivos estarão disponíveis para seleção
		 */
		/*extensions.add(".pdf");
		extensions.add(".xls");    
		extensions.add(".xlsx"); */
		intent.putStringArrayListExtra("filterFileExtension", extensions);
		startActivityForResult(intent, FILE_CHOOSER);
	}
	
	@Override
	public void onActivityResult(int requestCode, int resultCode, Intent data) {
	    if ((requestCode == FILE_CHOOSER) && (resultCode == RESULT_OK)) {
	        String fileSelected = data.getStringExtra("fileSelected");
	        Toast.makeText(this, fileSelected, Toast.LENGTH_SHORT).show();
	    }                   
	}
}

O bacana do código live é que você pode edita-lo, melhora-lo e disponibiliza-lo novamente na internet para que outros desenvolvedores possam fazer uso dele. Em TI não existe evolução sem a colaboração entre os profissionais.

Photo Picker

Para finalizar esse artigo vou apresentar uma maneira muito interessante de selecionar e exibir em sua aplicação uma Imagem armazenada no dispositivo.

Para realizar essa ação, usaremos uma Intent nativa do Android.

Essa Intent abrirá o aplicativo nativo do Android responsável por selecionar imagens. Após o aplicativo ser aberto, ao selecionar a foto o seu sistema receberá a resposta do app de seleção de imagens com a figura escolhida.

Logo abaixo esta escrito o código que cria e dispara a Intent descrita acima:

	private static final int CALL_IMAGE = 12;
	private void callFotoPicker() {
		Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
		photoPickerIntent.setType("image/*");
		startActivityForResult(photoPickerIntent, CALL_IMAGE);
	}

OBS: A constante CALL_IMAGE é utilizada para identificar o retorno da Intent no método onActivityResult.

Podemos observar que iniciamos essa intent através do método startActivityForResult, isso implica que teremos um resultado dessa solicitação. Esse resultado, será tratado no método onActivityResult da classe Activity que disparou a Intent. Vejamos então como ficou a implementação desse método.

        @Override
	protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
		super.onActivityResult(requestCode, resultCode, intent);
        	if(resultCode != RESULT_OK) {
			Log.d("", "Foto Picker foi cancelado pelo usuário");
		} else  if(requestCode == CALL_IMAGE) {
		  Cursor cursor = getContentResolver().query(intent.getData(), null, null, null, null);
				cursor.moveToFirst();  
				int idx = cursor.getColumnIndex(ImageColumns.DATA);
				String fileSrc = cursor.getString(idx); 
				Log.d("", "Picture:" + fileSrc);
                                 // Carrega a imagem recebida do aplicativo de Seleção.
				Bitmap bitmapPreview = BitmapFactory.decodeFile(fileSrc);
				imageView.setImageBitmap(bitmapPreview);
                }
	}

A imagem abaixo retrata um foto picker que será acionado através da Intent demonstrada logo acima.

Photo Picker Android 2.2

Agora sempre que precisar utilizar uma imagem que esta no seu dispositivo. Você já sabe o que fazer!

Anúncios

, , , , , ,

  1. Deixe um comentário

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s

%d bloggers like this: