Você está na página 1de 33

Intents

Intent

Objetos responsveis por passar informaes, 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,
necessrio que seja criado um Intent, mesmo quando no
temos nenhuma informao 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

Usando o Intent com Activities

necessrio usar o mtodo


startActivity() presente no objeto
Context, ou na Activity.

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

startActivity ( intent );
3

Usando Intents para passar dados

pode ser feito utilizando o mtodo putExtra


do Intent.

Quem passa os dados faz o seguinte:


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

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


intent.putExtra (turma", DAW3");
intent.putExtra (alunos", 08) ;
4

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");

Intent Filter

Criao 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
usurio
6

Abrindo outros aplicativos


Dependendo do tipo de action passada, um
novo aplicativo ser aberto para executar a
ao.
Este tipo de intent chamado de implcito,
porque no especificado qual a activity que
ser aberta.
Apenas passamos uma ao, e o sistema ir
decidir qual activity dever ser utilizada
nesse caso.

Exemplo
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://ufu.br"));
startActivity ( intent );
}
});

Exemplo

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 [] { "sbacala@gmail.com" });
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 permisso para fazer ligaes no Android

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

Aes de Intent teis

Lembra das aes nativas do Android?

Action

URI - chamar Uri.parse(uri)

Descrio

ACTION_VIEW

http://www.gmail.com

Abre browser na pgina

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 nmero

ACTION_INSERT

content://com.android.contacts/contacts

Abre activity padro para inserir


contatos

ACTION_PICK

ContactsContract.Contacts.CONTENT_URI

Abre lista de contatos do celular

ACTION_SET_WALLPAPER

Abre lista para escolha de papis


de parede

10

Aes 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 tambm:
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY, "Maria");
startActivity(intent);

Sim, voc pode passar parmetros via Intent, dependendo de qual ao est sendo
executada!
11

Aes de Intent

ACTION_CALL no ir funcionar pois necessrio pedir permisso atravs do


AndroidManifest.xml

Adicione esta permisso e tente novamente


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

Outras permisses teis

Alm disso, para usar o Google Maps necessrio rodar o emulador com Google
Maps.

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

12

Categorias e parmetros para Intent

Algumas vezes Ao e URI no so suficientes

possvel adicionar tantas categorias e parmetros extras quanto forem necessrios, alm
de outros dados:

Mtodo da Intent

Descrio

addCategory(String)

Adiciona mais uma categoria Intent

putExtra(String, ...)

Adiciona um parmetro Intent

setData(Uri)

Define o Uri. Equivalente ao parmetro URI do construtor

setType(String)

Define o tipo MIME: text/plain, image/jpeg, etc

setFlags(int)
Define os flags da Intent. Um flag til o FLAG_ACTIVITY_NEW_TASK, que faz a activity
addFlags(int)
numa
tarefa ou seja,

Os mtodos setData() einiciar


setType()
sonova
antagnicos,
setAction(String)

Define a ao desta intent. Note que, diferentemente de categorias e extras, apenas


uma ao pode ser definida por intent.

chamar um deles implica em limpar o outro.

13

Substituindo aes 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

Aes nativas

Crie um projeto IntentFilterNativeSubst

Modifique o manifest e rode a aplicao para cada


exemplo do slide anterior

Aps 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 aplicao executar
15

Aes e categorias prprias e filtragem

Para criar as prprias aes e categorias, faa:

Configur-las no manifest usando <intent-filter>

Criar a Intent e execut-la

Isto pode ser feito na mesma aplicao ou no

Filtragem

Ao executar uma Intent, uma activity s rodar caso seu intent-filter satisfaa a
ao e todas as categorais definidas na Intent.

Exemplos:

Considere intent-filter: ACAO1, CATEG1, CATEG2

1.

Intent: ACAO1, CATEG1 Executa

2.

Intent: ACAO1, CATEG1, CATEG2 Executa

3.

Intent: ACAO1, CATEG3 No executa!

16

Aes prprias e filtragem Exerccio

No manifest de IntentFilterNativeSubst

D play na aplicao IntentFilterNativeSubst para instal-la, note


que nada rodar na tela, pois no h MAIN e LAUNCHER

Em IntentFilterTest

Rode IntentFilterTest e IntentFilterNativeSubst rodar

Remova CATEG2 do manifest e repita a operao...

<action android:name="com.example.intentfilter.nativesubst.ACTION" />


<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.example.intentfilter.nativesubst.CATEG1" />
<category android:name="com.example.intentfilter.nativesubst.CATEG2" />

intent = new Intent("com.example.intentfilter.nativesubst.ACTION");


intent.addCategory("com.example.intentfilter.nativesubst.CATEG1");
intent.addCategory("com.example.intentfilter.nativesubst.CATEG2");
startActivity(intent);

17

Intent filter e permisses


Caso um <intent-filter> no seja definido para uma activity
apenas a prpria aplicao poder inici-la
Mas possvel export-la

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

Mesmo assim, necessrio que a aplicao que queira inici-la


use Intent.setComponentName() ou setClassName() e conhea 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 no exportada lanar uma SecurityException
18

Intent filter e permisses

possvel criar sua prpria permisso

Se uma aplicao diferente quiser acessar esta


activity ser necessrio usar um elemento <usespermission> para a permisso definida pela aplicao

<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>

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

19

Widgets

EditText

Recuperando o valor de Um EditText


EditText simpleEditText = (EditText)findViewById(R.id.editTextSimple);
String strValue = simpleEditText.getText().toString();

Monitorando um controle EditText para Aes

usurio clica no controle

usurio usa um click longo no controle

setOnKeyListener()

usurio muda o foco do controle

setOnClickListener()

setOnFocusChangedListener()

usurio muda o foco para ou a partir do controle

setOnFocusChangedListener()

simpleEditText.setOnFocusChangeListener(new OnFocusChangeListener()
{
public void onFocusChange(View v, boolean hasFocus) {
String strValue = simpleEditText.getText().toString();
21
Log.d(DEBUG_TAG, "User set EditText
value to " + strValue);
}
});

EditText
none
textEmailAddress

Diferentes tipos de
entrada
text
textEmailSubject
android:inputType="phone
textCapCharacters
textShortMessage
textCapWords
textLongMessage
textCapSentences
textPersonName
android:inputType="textPassword
textAutoCorrect
textPostalAddress
textAutoComplete
textPassword
textMultiLine

Definir SugestestextVisiblePassword
(Hints) e valores
textImeMultiLine
textWebEditText
android:hint="@string/hint"
textNoSuggestions
textFilter
textUri
textPhonetic

textWebEmailAddress
textWebPassword
number
numberSigned
numberDecimal
numberPassword
phone
datetime
dos
EditText
date
tim

22

EditText

Facilitar entrada textual (atributos extras)


Tornar

maiscula a cada frase, palavra ou


caractere
android:capitalize="sentences

Limitar

a zeros e uns

android:digits="01

Desabilitar

o cursor

android:cursorVisible="false"
23

Mscara para seu EditText

Utilize o evento provocado quando altera


o contedo do componente
onTextChanged

(CharSequence s, int start, int


before, int count)

Adicione um listener a seu componente


addTextChangedListener(TextWatcher

x)

24

Mscara de Fone (xx) xxxx-xxxx


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 MSCARA
}
@Override
public void afterTextChanged(Editable arg0) {
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
}

);

}
25

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


setCEPTextWatcher(etCEP);

Cdigo do OnTextChanged()
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;
}
}

26

Button e ImageButton

Permitem criar botes clicveis na tela

Button - subclasse de TextView

ImageButton - subclasse de ImageView

<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"
27
android:drawableLeft="@drawable/button_icon"
... />

Button e ImageButton

Permitem criar botes clicveis 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
28
}
});

Ou pode detectar o Click assim

Usando implementao annima

// 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);
...
}

29

Ou como Listener da Activity

Coloque a Activity com listener de eventos:

public class MainActivity extends Activity implements OnClickListener {

Crie o mtodo onClick

public void onClick(View v) {


switch (v.getId()) {
case R.id.bStart1:
.....
break;
case R.id.bStart2:
....
break;
case R.id.bSair:
finish();
} }

Informe que a classe o listener do boto

bStart1.setOnClickListener(this);
bStart2.setOnClickListener(this);
bSair.setOnClickListener(this);

30

Ou ento no XML

Informe no layout o evento do boto

android:onClick="buttonClicked"

Crie o mtodo onClick

public void buttonClicked(View v) {


Button theButton = (Button)v;
theButton.setText(WOW);
}

elimina a necessidade de quase todo o cdigo adicionado

criao da varivel Button,

armazenando a referncia

implementando OnClickListener e

definir a classe como OnCLickListener.


31

Exerccios

Fazer uma aplicativo para calcular o IMC.

Obtem peso e altura em uma interface e


mostra o resultado em outra.
Coloque

um gif ilustrando o resultado...

Você também pode gostar