+ All Categories
Home > Documents > Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por...

Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por...

Date post: 11-Jul-2020
Category:
Upload: others
View: 2 times
Download: 0 times
Share this document with a friend
31
Intents
Transcript
Page 1: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Intents

Page 2: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Intent Objetos responsáveis por passar informações, como se

fossem mensagens, para os principais componentes da API do Android, como as Activities, Services e BroadCast Receivers.

Para que um destes componentes seja instanciado, é necessário que seja criado um Intent, mesmo quando não temos nenhuma informação para passar para o componente criado.

Quando usado em conjunto com Intent Filters podemos até iniciar uma Activity de outros aplicativo, ou o inverso, deixar que um outro aplicativo inicie uma das nossas Activities.

2

Page 3: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Usando o Intent com Activities

é necessário usar o método

startActivity() presente no objeto

Context, ou na Activity.

Intent intent = new Intent (this , NewActivity.class );

startActivity ( intent );

3

Page 4: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Usando Intents para passar dados

pode ser feito utilizando o método putExtra

do Intent.

Quem passa os dados faz o seguinte:

Intent intent = new Intent (this , NewActivity.class );

intent.putExtra ("curso", "Android");

intent.putExtra (“turma", “UFU");

intent.putExtra (“alunos", 18) ;

4

Page 5: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Usando Intents para passar dados

Quem recebe os dados faz o seguinte:

Bundle extras = getIntent().getExtras();

String curso = extras.getString ("curso");

String turma = extras.getString (“turma");

int nroAlunos = extras.getInt (“alunos");

5

Page 6: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Intent Filter

Criação de filtros que determinam quais Intents devem ser executadas

para cada mensagem <activity android:name=".HelloActivity"

android:label="@string/app_name">

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

Action = MAIN

Diz que activity é um ponto de partida, semelhante ao public static void main()

da Java

Category = LAUNCHER

Indica que o ícone da activity deverá aparecer na tela pode ser aberta pelo

usuário 6

Page 7: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Abrindo outros aplicativos

Dependendo do tipo de action passada, um novo aplicativo será aberto para executar a ação.

Este tipo de intent é chamado de implícito, porque não é especificado qual a activity que será aberta.

Apenas passamos uma ação, e o sistema irá decidir qual activity deverá ser utilizada nesse caso.

7

Page 8: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Exemplo

8

public class MainActivity extends Activity {

@Override

public void onCreate ( Bundle savedInstanceState ) {

super . onCreate ( savedInstanceState );

setContentView (R. layout . main );

Button viewSiteButton = ( Button ) findViewById (R.id. view_site_button );

Button sendEmailButton = ( Button ) findViewById (R.id. send_email_button );

Button makeCallButton = ( Button ) findViewById (R.id. make_call_button );

viewSiteButton . setOnClickListener ( new OnClickListener () {

@Override

public void onClick ( View v) {

Intent intent = new Intent ( Intent . ACTION_VIEW , Uri

. parse ("http://www.ufu.br"));

startActivity ( intent );

}

});

Page 9: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Exemplo

9

sendEmailButton.setOnClickListener ( new OnClickListener () {

@Override

public void onClick ( View v) {

Intent intent = new Intent ( Intent . ACTION_SEND );

intent . setType (" plain / text ");

intent . putExtra ( Intent . EXTRA_EMAIL,

new String [] { "[email protected]" });

startActivity ( Intent . createChooser ( intent , " Enviar email "));

}

});

makeCallButton . setOnClickListener ( new OnClickListener () {

@Override

public void onClick ( View v) {

Intent intent = new Intent ( Intent . ACTION_DIAL , Uri

. parse (" tel :3827-3000"));

startActivity ( intent );

}

});

} } • adicione a permissão para fazer ligações no Android

<uses-permission android:name =" android.permission.CALL_PHONE " />

Page 10: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Ações de Intent úteis

Lembra das ações “nativas” do Android?

10

Action URI - chamar Uri.parse(uri) Descrição

ACTION_VIEW http://www.gmail.com Abre browser na página

ACTION_VIEW

ACTION_EDIT content://com.android.contacts/contacts/1

Mostra ou edita o contato

solicitado

ACTION_VIEW geo:0,0?q=Presidente+Vargas,Rio+de+Janeiro Busca no Google Maps

ACTION_CALL

ACTION_DIAL tel:12345678 Liga ou apenas disca para o número

ACTION_INSERT content://com.android.contacts/contacts Abre activity padrão para inserir

contatos

ACTION_PICK ContactsContract.Contacts.CONTENT_URI Abre lista de contatos do celular

ACTION_SET_WALLPAPER - Abre lista para escolha de papéis

de parede

Page 11: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Exercício: Ações de Intent Crie um novo projeto chamado IntentFilterTest

Experimente chamar activities usando a tabela anterior

Exemplo: Uri uri = Uri.parse("content://com.android.contacts/contacts");

Intent intent = new Intent(Intent.ACTION_INSERT, uri);

startActivity(intent);

intent = new Intent(Intent.ACTION_SET_WALLPAPER);

startActivity(intent);

Experimente também: Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);

intent.putExtra(SearchManager.QUERY, "Maria");

startActivity(intent);

Sim, você pode passar parâmetros via Intent, dependendo de qual ação está sendo

executada! 11

Page 12: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Ações de Intent ACTION_CALL não irá funcionar pois é necessário pedir

permissão através do AndroidManifest.xml

Adicione esta permissão e tente novamente

<uses-permission android:name="android.permission.CALL_PHONE”/>

Outras permissões úteis android.permission.READ_CONTACTS android.permission.VIBRATE android.permission.INTERNET android.permission.BATTERY_STATS android.permission.BLUETOOTH android.permission.CAMERA android.permission.REBOOT android.permission.SEND_SMS

Além disso, para usar o Google Maps é necessário rodar o emulador com Google Maps. 12

Page 13: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Categorias e parâmetros para Intent

Algumas vezes Ação e URI não são suficientes

É possível adicionar tantas categorias e parâmetros extras quanto forem necessários, além de outros dados:

Os métodos setData() e setType() são antagônicos, ou seja, chamar um deles implica em limpar o outro.

13

Método da Intent Descrição

addCategory(String) Adiciona mais uma categoria à Intent

putExtra(String, ...) Adiciona um parâmetro à Intent

setData(Uri) Define o Uri. Equivalente ao parâmetro URI do construtor

setType(String) Define o tipo MIME: text/plain, image/jpeg, etc

setFlags(int)

addFlags(int)

Define os flags da Intent. Um flag útil é o FLAG_ACTIVITY_NEW_TASK, que faz a activity

iniciar numa nova tarefa

setAction(String) Define a ação desta intent. Note que, diferentemente de categorias e extras, apenas

uma ação pode ser definida por intent.

Page 14: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Substituindo ações nativas Tecla Home

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.HOME"/>

<category android:name="android.intent.category.DEFAULT" />

</intent-filter>

Tecla discar (call) <action android:name="android.intent.action.CALL_BUTTON" />

<category android:name="android.intent.category.DEFAULT" />

Intent.ACTION_SEARCH <action android:name="android.intent.action.SEARCH" />

<category android:name="android.intent.category.DEFAULT" />

Intent.ACTION_WEB_SEARCH <action android:name="android.intent.action.WEB_SEARCH" />

<category android:name="android.intent.category.DEFAULT" />

14

Page 15: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Substituindo Ações nativas

Crie um projeto IntentFilterNativeSubst

Modifique o manifest e rode a aplicação para cada exemplo do slide anterior

Após o último exemplo (web search) edite o projeto IntentFilterTest para chamar web search: intent = new Intent(Intent.ACTION_WEB_SEARCH);

intent.putExtra(SearchManager.QUERY, "Maria");

startActivity(intent);

Execute IntentFilterTest

Veja que o emulador irá perguntar qual aplicação executar

15

Page 16: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Intent filter e permissões Caso um <intent-filter> não seja definido para uma activity

apenas a própria aplicação poderá iniciá-la

Mas é possível exportá-la

<activity ... android:exported=“true” > ...

Mesmo assim, é necessário que a aplicação que queira iniciá-la use Intent.setComponentName() ou setClassName() e conheça o nome da classe completo

Exemplo: “com.example.application.ActivityName”

O uso de <intent-filter> no manifest exporta a activity automaticamente

Usar setClassName() ou setComponentName() para iniciar uma activity não exportada lançará uma SecurityException

16

Page 17: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Intent filter e permissões

É possível criar sua própria permissão <manifest ... > <permission android:label="@string/..." android:name="application_package.PERMISSION_NAME" /> <application ... > <activity ... android:exported="true" android:permission="application_package.PERMISSION_NAME" > </activity> </application> </manifest>

Se uma aplicação diferente quiser acessar esta activity será necessário usar um elemento <uses-permission> para a permissão definida pela aplicação <uses-permission android:name="application_package.PERMISSION_NAME"/>

17

Page 18: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Widgets

Page 19: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

EditText Recuperando o valor de Um EditText

Monitorando um controle EditText para Ações

usuário clica no controle

setOnClickListener()

usuário usa um click longo no controle

setOnKeyListener()

usuário muda o foco do controle

setOnFocusChangedListener()

usuário muda o foco para ou a partir do controle

setOnFocusChangedListener()

19

EditText simpleEditText = (EditText)findViewById(R.id.editTextSimple);

String strValue = simpleEditText.getText().toString();

simpleEditText.setOnFocusChangeListener(new OnFocusChangeListener()

{

public void onFocusChange(View v, boolean hasFocus) {

String strValue = simpleEditText.getText().toString();

Log.d(DEBUG_TAG, "User set EditText value to " + strValue);

}

});

Page 20: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

EditText

Diferentes tipos de entrada

android:inputType="phone“

android:inputType="textPassword“

Definir Sugestões (Hints) e valores dos EditText

android:hint="@string/hint"

20

none text textCapCharacters textCapWords textCapSentences textAutoCorrect textAutoComplete textMultiLine textImeMultiLine textNoSuggestions textUri

textEmailAddress textEmailSubject textShortMessage textLongMessage textPersonName textPostalAddress textPassword textVisiblePassword textWebEditText textFilter textPhonetic

textWebEmailAddress textWebPassword number numberSigned numberDecimal numberPassword phone datetime date tim

Page 21: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

EditText

Facilitar entrada textual (atributos extras)

Tornar maiúscula a cada frase, palavra ou caractere

android:capitalize="sentences“

Limitar a zeros e uns

android:digits="01“

Desabilitar o cursor

android:cursorVisible="false"

21

Page 22: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Máscara para seu EditText

Utilize o evento provocado quando altera

o conteúdo do componente

onTextChanged (CharSequence s, int start, int

before, int count)

Adicione um listener a seu componente

addTextChangedListener(TextWatcher x)

22

Page 23: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Máscara de Fone (xx) xxxx-xxxx

23

private void setPhoneTextWatcher(final EditText et) {

et.addTextChangedListener(new TextWatcher() { private boolean editando = false; private String fone; private int tamVelho = 0; @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // COLOCA A MÁSCARA }

@Override public void afterTextChanged(Editable arg0) { } @Override public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) { }

} ); } etCEP = (EditText) findViewById(R.id.et_cep); setCEPTextWatcher(etCEP);

Page 24: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Código do OnTextChanged()

24

public void onTextChanged(CharSequence s, int start, int before, int count) { if (!editando) { editando = !editando; String text = et.getText().toString(); fone = text.replaceAll("\\(", "").replaceAll("\\)", "").replaceAll("-", "").replaceAll(" ", ""); if (fone.length() >= 2 && fone.length() > tamVelho) {

String parte0 = fone.substring(0, 2); String parte1 = fone.substring(2); String parte2 = ""; if (fone.length() < 6) {

tamVelho = fone.length(); fone = "(" + parte0 + ") " + parte1;

} else { parte1 = fone.substring(2, 6); parte2 = fone.substring(6); tamVelho = fone.length(); fone = "(" + parte0 + ") " + parte1 + "-" + parte2;

} } else {

tamVelho = fone.length(); fone = text;

} if (fone.length() > 2) {

et.setTextKeepState(fone, BufferType.EDITABLE); et.setSelection(fone.length());

} editando = !editando; }

}

Page 25: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Button e ImageButton Permitem criar botões clicáveis na tela

Button - subclasse de TextView

ImageButton - subclasse de ImageView

25

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/button_text"

... /> <ImageButton

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/button_icon"

... />

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/button_text"

android:drawableLeft="@drawable/button_icon"

... />

Page 26: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Button e ImageButton Permitem criar botões clicáveis na tela

Button - subclasse de TextView

ImageButton - subclasse de ImageView

Setando imagem via Java e XML

imageButton.setImageResource(R.drawable.image_id)

button.setCompoundDrawablesWithIntrinsicBounds(left,top,right,bottom)

<ImageButton android:src="@drawable/..." ... />

<Button android:drawableLeft="@drawable/..."

android:drawableTop="..."

android:drawableRight="..." android:drawableBottom="..." ... />

Detectando clique: final Button button = (Button) findViewById(R.id.button_id);

button.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

// Perform action on click

}

});

26

Page 27: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Ou pode detectar o Click assim

Usando implementação anônima

27

// Create an anonymous implementation of OnClickListener

private OnClickListener myListener = new OnClickListener() {

public void onClick(View v) {

// do something when the button is clicked

}

};

protected void onCreate(Bundle savedValues) {

...

// Capture our button from layout

Button button = (Button)findViewById(R.id.button1);

// Register the onClick listener with the implementation above

button.setOnClickListener(myListener);

...

}

Page 28: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Ou como Listener da Activity

Coloque a Activity com listener de eventos:

Crie o método onClick

Informe que a classe é o listener do botão

28

public class MainActivity extends Activity implements OnClickListener {

public void onClick(View v) {

switch (v.getId()) {

case R.id.bStart1:

.....

break;

case R.id.bStart2:

....

break;

case R.id.bSair:

finish();

} }

bStart1.setOnClickListener(this);

bStart2.setOnClickListener(this);

bSair.setOnClickListener(this);

Page 29: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Ou então no XML

Informe no layout o evento do botão

Crie o método onClick

elimina a necessidade de quase todo o código adicionado

criação da variável Button,

armazenando a referência

implementando OnClickListener e

definir a classe como OnCLickListener.

29

android:onClick="buttonClicked"

public void buttonClicked(View v) {

Button theButton = (Button)v;

theButton.setText(“WOW”);

}

Page 30: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Exercícios

Fazer uma aplicativo para calcular o IMC.

Obtém peso e altura em uma activity e

mostra o resultado em outra activity.

Coloque um gif ilustrando o resultado...

Enviar o código para [email protected],

assunto IMC ANDROID

Page 31: Intents - FACOMbacala/ANDROID/4 - Intents.pdf · 2016-09-08 · Intent Objetos responsáveis por passar informações, como se fossem mensagens, para os principais componentes da

Recommended