Intents. Lanzar unha Activity

De Manuais Informática - IES San Clemente.
Revisión del 21:48 4 nov 2014 de Carrion (discusión | contribuciones) (Intents explícitos)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Ir a la navegación Ir a la búsqueda

Permisos

  • Cando instalamos unha aplicación nun dispositivo real (non nun AVD) se precisa acceder a características que esixen algún tipo de permiso, o proceso de instalación pregunta se estamos dispostos a dar eses permisos para que a aplicación poida funcionar con tódalas súas funcionalidades.
  • Por exemplo, instalando Gmail:

Gmail.png

  • O proceso de instalación pregunta ao usuario se por exemplo lle deixa acceder a esta aplicación á súa lista de contactos.
  • No ficheiro AndroidManifest.xml é onde se declaran os permisos que precisa a aplicación para poder facer uso de funcionalidades protexidas: contactos, cámara, mermoria usb, gps, etc.
  • A través de unha ou varias etiquetas <uses-permission> vanse declarar os permisos que precisa a aplicación.

Exemplos de permisos no ficheiro AndroidManifest.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
 3     package="com.example.u3_20_intents"
 4     android:versionCode="1"
 5     android:versionName="1.0" >
 6 
 7     <uses-sdk
 8         android:minSdkVersion="16"
 9         android:targetSdkVersion="21" />
10 
11     <application
12         android:allowBackup="true"
13         android:icon="@drawable/ic_launcher"
14         android:label="@string/app_name"
15         android:theme="@style/AppTheme" >
16         <activity
17             android:name=".U3_20_Intents"
18             android:label="@string/app_name" >
19             <intent-filter>
20                 <action android:name="android.intent.action.MAIN" />
21 
22                 <category android:name="android.intent.category.LAUNCHER" />
23             </intent-filter>
24         </activity>
25         <activity
26             android:name=".RecibirDatos"
27             android:label="@string/title_activity_recibir_datos" >
28         </activity>
29     </application>
30 
31     <uses-permission android:name="android.permission.CALL_PHONE" />
32     <uses-permission android:name="android.permission.INTERNET" />
33     <uses-permission android:name="android.permission.READ_CONTACTS" />
34  
35 
36 </manifest>
  • Liña 31: Permiso que "permite" realizar unha chamada de telefono sen pasar a través do interface do teléfono para que o usuario marque.
  • Liña 32: Permítelle á aplicación abrir conexións de rede.
  • Liña 33: Da súa lectura pódese concluír o que permite.
  • Tamén se pode realizar de modo gráfico.
  • No ficheiro AndroidManifest.xml premer en Permissions

Android 2014 U3 20 LanzarActivity 15.jpg

  • Lembrar que os permisos asígnanse no momento da instalación a aplicación. Nun dispositivo real pídeselle consentimento ao usuario, non así nun AVD.

Chamadas a intents de modo implícito

  • Como xa se dixo, o que un compoñente pode ser lanzado de forma implícita cando se indica a acción que se desexa realizar e se é o caso os datos sobre os que se desexa realizar a acción.
  • Non se vai especificar a
  1 package com.example.u3_20_intents;
  2 
  3 import android.app.Activity;
  4 import android.content.Intent;
  5 import android.database.Cursor;
  6 import android.net.Uri;
  7 import android.os.Bundle;
  8 import android.provider.ContactsContract;
  9 import android.view.Menu;
 10 import android.view.MenuItem;
 11 import android.view.View;
 12 import android.widget.CheckBox;
 13 import android.widget.TextView;
 14 import android.widget.Toast;
 15 
 16 public class U3_20_Intents extends Activity {
 17 
 18 	public final static String NOME = "com.example.NOME";
 19 	private static final int COD_PETICION = 33;
 20 	private static final int COD_CONTACTOS = 7;
 21 
 22 	TextView tvNome;
 23 
 24 	@Override
 25 	protected void onCreate(Bundle savedInstanceState) {
 26 		super.onCreate(savedInstanceState);
 27 		setContentView(R.layout.activity_u3_20__intents);
 28 		tvNome = (TextView) findViewById(R.id.et_nome);
 29 	}
 30 
 31 	@Override
 32 	public boolean onCreateOptionsMenu(Menu menu) {
 33 		// Inflate the menu; this adds items to the action bar if it is present.
 34 		getMenuInflater().inflate(R.menu.u3_20__intents, menu);
 35 		return true;
 36 	}
 37 
 38 	@Override
 39 	public boolean onOptionsItemSelected(MenuItem item) {
 40 		// Handle action bar item clicks here. The action bar will
 41 		// automatically handle clicks on the Home/Up button, so long
 42 		// as you specify a parent activity in AndroidManifest.xml.
 43 		int id = item.getItemId();
 44 		if (id == R.id.action_settings) {
 45 			return true;
 46 		}
 47 		return super.onOptionsItemSelected(item);
 48 	}
 49 
 50 	public void onEnviarClick(View view) {
 51 		CheckBox chkDestruir = (CheckBox) findViewById(R.id.chk_destruir);
 52 
 53 		Intent intent = new Intent(this, RecibirDatos.class);
 54 		intent.putExtra(NOME, tvNome.getText().toString());
 55 
 56 		// startActivity(intent);
 57 		startActivityForResult(intent, COD_PETICION);
 58 
 59 		if (chkDestruir.isChecked())
 60 			finish();
 61 	}
 62 
 63 	public void onCalculadoraClick(View v) {
 64 
 65 		Intent intent = new Intent();
 66 		intent.setClassName("com.android.calculator2", "com.android.calculator2.Calculator");
 67 
 68 		// startActivity(intent);
 69 		startActivityForResult(intent, 3);
 70 	}
 71 
 72 	@Override
 73 	// Este método chámase cando se volve da actividade secundaria
 74 	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 75 
 76 		if (requestCode == COD_PETICION) {
 77 			if (resultCode == RESULT_OK) {
 78 				if (data.hasExtra("APELIDO")) {
 79 					Toast.makeText(this, tvNome.getText() + " O teu apelido é " + data.getExtras().getString("APELIDO"), Toast.LENGTH_SHORT).show();
 80 				}
 81 			} else
 82 				Toast.makeText(this, "Saíches da actividade secundaria sen premer o botón Pechar", Toast.LENGTH_SHORT).show();
 83 		}
 84 
 85 		else if (requestCode == COD_CONTACTOS && resultCode == RESULT_OK) {
 86 			Uri contactoData = data.getData();
 87 			Cursor c = managedQuery(contactoData, null, null, null, null);
 88 			if (c.moveToFirst()) {
 89 				String nombre = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
 90 				Toast.makeText(this, "Contacto: " + nombre, Toast.LENGTH_LONG).show();
 91 			}
 92 		}
 93 
 94 	}
 95 
 96 	public void chamarIntent(View view) {
 97 		Intent intent = null;
 98 		switch (view.getId()) {
 99 		case R.id.btn_seleccionar_contacto:
100 			intent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts/people/"));
101 			startActivityForResult(intent, COD_CONTACTOS);
102 			break;
103 
104 		case R.id.btn_amosar_contactos:
105 			intent = new Intent(Intent.ACTION_VIEW, Uri.parse("content://contacts/people/"));
106 			startActivity(intent);
107 			break;
108 
109 		case R.id.btn_chamar_tel:
110 			intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:(+34)981445566"));
111 			startActivity(intent);
112 			break;
113 
114 		case R.id.btn_marcar_tel:
115 			intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:(+34)986112233"));
116 			startActivity(intent);
117 			break;
118 
119 		case R.id.btn_navegador:
120 			intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.es/"));
121 			startActivity(intent);
122 			break;
123 		}
124 	}
125 
126 	public void finish() {
127 		super.finish();
128 		Toast.makeText(this, "Mataches a actividade principal", Toast.LENGTH_SHORT).show();
129 	}
130 
131 }


 1 package com.example.u3_20_intents;
 2 
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.os.Bundle;
 6 import android.view.Menu;
 7 import android.view.MenuItem;
 8 import android.view.View;
 9 import android.widget.EditText;
10 import android.widget.TextView;
11 import android.widget.Toast;
12 
13 public class RecibirDatos extends Activity {
14 	// String Forma_Pechar_Activity;
15 
16 	@Override
17 	protected void onCreate(Bundle savedInstanceState) {
18 		super.onCreate(savedInstanceState);
19 		setContentView(R.layout.activity_recibir_datos);
20 		// Forma_Pechar_Activity=" Premendo botonera Retroceso";
21 
22 		TextView tvResultado = (TextView) findViewById(R.id.tv_resultado);
23 
24 		Intent intent = getIntent();
25 
26 		if ("http".equals(intent.getScheme()))
27 
28 			tvResultado.setText("URL: " + intent.getDataString());
29 		else
30 			tvResultado.setText("Ola " + intent.getExtras().getString(U3_20_Intents.NOME));
31 
32 	}
33 
34 	@Override
35 	public boolean onCreateOptionsMenu(Menu menu) {
36 		// Inflate the menu; this adds items to the action bar if it is present.
37 		getMenuInflater().inflate(R.menu.recibir_datos, menu);
38 		return true;
39 	}
40 
41 	@Override
42 	public boolean onOptionsItemSelected(MenuItem item) {
43 		// Handle action bar item clicks here. The action bar will
44 		// automatically handle clicks on the Home/Up button, so long
45 		// as you specify a parent activity in AndroidManifest.xml.
46 		int id = item.getItemId();
47 		if (id == R.id.action_settings) {
48 			return true;
49 		}
50 		return super.onOptionsItemSelected(item);
51 	}
52 
53 	public void onPecharClick(View view) {
54 		// Forma_Pechar_Activity=" Premendo botón Pechar";
55 
56 		EditText et_apelido = (EditText) findViewById(R.id.et_apelido);
57 
58 		Intent datos_volta = new Intent();
59 		datos_volta.putExtra("APELIDO", et_apelido.getText().toString());
60 		setResult(RESULT_OK, datos_volta);
61 		finish();
62 
63 	}
64 
65 	public void finish() {
66 		super.finish();
67 		// Toast.makeText(this,
68 		// "Saiches da actividade secundaria: "+Forma_Pechar_Activity,
69 		// Toast.LENGTH_SHORT).show();
70 	}
71 
72 }


<syntaxhighlight lang="xml" line enclose="div" highlight="" > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical"
   android:padding="5dp" >
   <LinearLayout
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="horizontal" >
       <TextView
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="Dime o teu nome" />
       <EditText
           android:id="@+id/et_nome"
           android:layout_width="match_parent"
           android:layout_height="wrap_content" />
   </LinearLayout>
   <CheckBox
       android:id="@+id/chk_destruir"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:checked="false"
       android:text="Destruír esta activity ao chamar á 2ª" />
   <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal"
       android:text="Chamadas explícitas a intents"
       android:textColor="#00F" />
   <Button
       android:id="@+id/btn_enviar"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:onClick="onEnviarClick"
       android:text="Chamar 2ª Activity: Recibir Datos" />
   <Button
       android:id="@+id/btn_calculadora"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:onClick="onCalculadoraClick"
       android:text="Calculadora" />
   <TextView
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal"
       android:text="Chamadas implícitas a intents"
       android:textColor="#00F" />
   <Button
       android:id="@+id/btn_amosar_contactos"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:onClick="chamarIntent"
       android:text="Amosar contactos" />
   <Button
       android:id="@+id/btn_seleccionar_contacto"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:onClick="chamarIntent"
       android:text="Seleccionar contacto" />
   <Button
       android:id="@+id/btn_chamar_tel"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:onClick="chamarIntent"
       android:text="Chamar por teléfono" />
   <Button
       android:id="@+id/btn_marcar_tel"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:onClick="chamarIntent"
       android:text="Marcar nº de teléfono" />
   <Button
       android:id="@+id/btn_navegador"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:onClick="chamarIntent"
       android:text="Abrir navegador*" />

</LinearLayout> </syntaxhighlight" >


<syntaxhighlight lang="xml" line enclose="div" highlight="" > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical" >
   <TextView
       android:id="@+id/tv_resultado"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal"
       android:textSize="20sp"
       android:text="resultado" />
   <EditText
       android:id="@+id/et_apelido"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal"
       android:hint="Introduce o teu apelido" />
   <Button
       android:id="@+id/btn_pechar"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center_horizontal"
       android:onClick="onPecharClick"
       android:text="Pechar" />

</LinearLayout> </syntaxhighlight" >




-- Ángel D. Fernández González e Carlos Carrión Álvarez -- (2014).