Intents. Lanzar unha Activity
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:
- 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
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.u3_20_intents"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="21" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".U3_20_Intents"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".RecibirDatos"
android:label="@string/title_activity_recibir_datos" >
</activity>
</application>
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
</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.
- Para coñecer os permisos dispoñibles podemos consultar o seguinte enlace e incluílos directamente no xml:
- Tamén se pode realizar de modo gráfico.
- No ficheiro AndroidManifest.xml premer en Permissions
- 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
package com.example.u3_20_intents;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;
public class U3_20_Intents extends Activity {
public final static String NOME = "com.example.NOME";
private static final int COD_PETICION = 33;
private static final int COD_CONTACTOS = 7;
TextView tvNome;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_u3_20__intents);
tvNome = (TextView) findViewById(R.id.et_nome);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.u3_20__intents, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void onEnviarClick(View view) {
CheckBox chkDestruir = (CheckBox) findViewById(R.id.chk_destruir);
Intent intent = new Intent(this, RecibirDatos.class);
intent.putExtra(NOME, tvNome.getText().toString());
// startActivity(intent);
startActivityForResult(intent, COD_PETICION);
if (chkDestruir.isChecked())
finish();
}
public void onCalculadoraClick(View v) {
Intent intent = new Intent();
intent.setClassName("com.android.calculator2", "com.android.calculator2.Calculator");
// startActivity(intent);
startActivityForResult(intent, 3);
}
@Override
// Este método chámase cando se volve da actividade secundaria
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == COD_PETICION) {
if (resultCode == RESULT_OK) {
if (data.hasExtra("APELIDO")) {
Toast.makeText(this, tvNome.getText() + " O teu apelido é " + data.getExtras().getString("APELIDO"), Toast.LENGTH_SHORT).show();
}
} else
Toast.makeText(this, "Saíches da actividade secundaria sen premer o botón Pechar", Toast.LENGTH_SHORT).show();
}
else if (requestCode == COD_CONTACTOS && resultCode == RESULT_OK) {
Uri contactoData = data.getData();
Cursor c = managedQuery(contactoData, null, null, null, null);
if (c.moveToFirst()) {
String nombre = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
Toast.makeText(this, "Contacto: " + nombre, Toast.LENGTH_LONG).show();
}
}
}
public void chamarIntent(View view) {
Intent intent = null;
switch (view.getId()) {
case R.id.btn_seleccionar_contacto:
intent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts/people/"));
startActivityForResult(intent, COD_CONTACTOS);
break;
case R.id.btn_amosar_contactos:
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("content://contacts/people/"));
startActivity(intent);
break;
case R.id.btn_chamar_tel:
intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:(+34)981445566"));
startActivity(intent);
break;
case R.id.btn_marcar_tel:
intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:(+34)986112233"));
startActivity(intent);
break;
case R.id.btn_navegador:
intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.es/"));
startActivity(intent);
break;
}
}
public void finish() {
super.finish();
Toast.makeText(this, "Mataches a actividade principal", Toast.LENGTH_SHORT).show();
}
}
package com.example.u3_20_intents;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class RecibirDatos extends Activity {
// String Forma_Pechar_Activity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recibir_datos);
// Forma_Pechar_Activity=" Premendo botonera Retroceso";
TextView tvResultado = (TextView) findViewById(R.id.tv_resultado);
Intent intent = getIntent();
if ("http".equals(intent.getScheme()))
tvResultado.setText("URL: " + intent.getDataString());
else
tvResultado.setText("Ola " + intent.getExtras().getString(U3_20_Intents.NOME));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.recibir_datos, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
public void onPecharClick(View view) {
// Forma_Pechar_Activity=" Premendo botón Pechar";
EditText et_apelido = (EditText) findViewById(R.id.et_apelido);
Intent datos_volta = new Intent();
datos_volta.putExtra("APELIDO", et_apelido.getText().toString());
setResult(RESULT_OK, datos_volta);
finish();
}
public void finish() {
super.finish();
// Toast.makeText(this,
// "Saiches da actividade secundaria: "+Forma_Pechar_Activity,
// Toast.LENGTH_SHORT).show();
}
}
<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).