También pueden ver "Contacto" desde un boton de menu
http://cursoandroidstudio.blogspot.com.ar/2014/09/contacto.html
MyActivity.java
import android.app.AlertDialog;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MyActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
Button btnContacto = (Button) findViewById(R.id.btnContacto);
btnContacto.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MyActivity.this, Contacto.class);
startActivity(i);
}
});
Button btnAlertDialog = (Button) findViewById(R.id.btnAlertcontacto);
btnAlertDialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LayoutInflater inflater = getLayoutInflater();
View dialoglayout = inflater.inflate(R.layout.contacto, null);
final EditText etAsunto = (EditText) dialoglayout.findViewById(R.id.et_EmailAsunto);
final EditText etMensaje = (EditText) dialoglayout.findViewById(R.id.et_EmailMensaje);
Button btnEnviarMail = (Button) dialoglayout.findViewById(R.id.btnEnviarMail);
btnEnviarMail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String subject = etAsunto.getText().toString();
String message = etMensaje.getText().toString();
Intent email = new Intent(Intent.ACTION_SEND);
email.putExtra(Intent.EXTRA_EMAIL, new String[] { "micorre@gmail.com"});
email.putExtra(Intent.EXTRA_SUBJECT, subject);
email.putExtra(Intent.EXTRA_TEXT, " mensaje " + message);
// need this to prompts email client only
email.setType("message/rfc822");
startActivity(Intent.createChooser(email, "Seleciona un cliente de correo"));
}
});
AlertDialog.Builder builder = new AlertDialog.Builder(MyActivity.this);
builder.setView(dialoglayout);
builder.show();
}
});
}
}
Nota: Si trabajamos desde un fragment hay que agregarle el "getActivity()" en la primera linea después del onClick(), entre todos los cambios.
LayoutInflater inflater = getActivity().getLayoutInflater();
Y en el AlertDialog hay que cambiar el "MyActivity.this" por "getActivity()". Si trabajamos desde un Fragment. (ante-penultima linea del código anterior)
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
Contacto.java
public class Contacto extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contacto);
Button btnSendMail = (Button) findViewById(R.id.btnEnviarMail);
btnSendMail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//final EditText etDe = (EditText) getView().findViewById(R.id.et_EmailDe);
final EditText etAsunto = (EditText) findViewById(R.id.et_EmailAsunto);
final EditText etMensaje = (EditText) findViewById(R.id.et_EmailMensaje);
//String to = etDe.getText().toString();
String subject = etAsunto.getText().toString();
String message = etMensaje.getText().toString();
Intent email = new Intent(Intent.ACTION_SEND);
email.putExtra(Intent.EXTRA_EMAIL, "micorreo@gmail.com");
email.putExtra(Intent.EXTRA_SUBJECT, subject);
email.putExtra(Intent.EXTRA_TEXT, message);
// need this to prompts email client only
email.setType("message/rfc822");
startActivity(Intent.createChooser(email, "Seleciona un cliente de correo"));
}
});
}
}
contacto.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="5dp"
android:layout_margin="10dp"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="¿Quieres hacer un pedido?"
android:id="@+id/textView2" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Contactate por acá"
android:id="@+id/textView3" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/scrollView" >
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:weightSum="1">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Asunto:"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_marginTop="12dp"/>
<EditText
android:id="@+id/et_EmailAsunto"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Escribe tu Asunto">
</EditText>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Mensaje:"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_marginTop="10dp" />
<EditText
android:id="@+id/et_EmailMensaje"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="Escribe tu Mensaje"
android:inputType="textMultiLine"
android:lines="7"/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Enviar"
android:id="@+id/btnEnviarMail" />
</LinearLayout>
</ScrollView>
</LinearLayout>
AndroidManifest.xml
<activity android:name=".Contacto"></activity>
buenas amigo me podrias ayudar con una cuestion que tengo, lo que pasa esque en mi caso yo no tengo ningun boton hablando del contacto, yo lo tengo dentro de un navigation fragment, me podrias ayudar para saber como incorporarlo?
ResponderEliminarAmigo, muchisimas gracias por tus tutoriales, son muy buenos.
ResponderEliminargracias capo
EliminarHola Ramiro, nuevamente te escribo, para ver si puedes sacarme de una duda que tengo.
ResponderEliminarHace referencia a los startActivity a la hora de realizar un ACTION, como pueda ser abrir una aplicación instalada en el móvil.
¿Cómo puedo hacer para añadirle los parámetros que necesite? Tales como el ActivityPackage, ActivityClass, DataType, DataUri, etc.
Por poner un ejemplo, en otro tipo de códigos, si queremos lanzar la aplicación Google Maps desde un método onClick, necesitamos de un:
Action: android.intent.action.VIEW
ActivityClass: com.google.android.maps.MapsActivity
ActivityPackage: com.google.android.apps.maps
DataUri: geo:0,0?q=Gran Vía Parque, Córdoba
Me gustaría saber si existe alguna forma de poder implementar desde la plataforma Android Studio este tipo de eventos, sin tener que crear una clase nueva que haga mención a la API de Google.
Gracias por tu atención, sigo enganchado a tus videos, un saludo.
Hola sabes que ayer lo implementé justamente lo que me estas diciendo, la primera vez que lo llamaba andaba bien, la segunda vez fallecia. Nose porque, entonces implemente esto -> http://cursoandroidstudio.blogspot.com.ar/2014/11/listview-animado.html .. lo que hago con un boton, hago que aparezca y desaparezca el mapa.. justamente estoy colaborando en un proyecto descargalo y mira lo que te digo https://play.google.com/store/apps/details?id=com.tatoado.tottiapp lo podes ver en "san juan de noche" "boliches"
EliminarMi enhorabuena Ramiro, estáis realizando un magnifico trabajo con la aplicación tottiapp. La verdad que si, me ha encantado, la idea de mostrar los mapas de esa forma tan llamativa en pantalla, es genial, estoy deseando ver un nuevo tutorial en donde nos muestres como lo haces…
EliminarPor mi parte te adjunto a continuación el código de cómo he conseguido lanzar la aplicación Maps desde un método onClick, de ésta manera se abriría por defecto, mostrándonos a continuación las opción que deseemos incluir en el código, como pueda ser la ubicación en mapa o en Street View y también la ruta de navegación hasta el destino fijado.
Espero pueda ser de ayuda y mil gracias por todo, eres un crack!!
Button btnMaps = (Button) findViewById(R.id.btnMaps);
btnMaps.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try{
Intent Maps = new Intent(Intent.ACTION_VIEW);
//Opción 1: Se abre por defecto Maps con la ubicación referida
Maps.setData(Uri.parse("geo:0,0?q=Avenida Gran Vía Parque, Córdoba"))
//Opción 2: Se abre por defecto Maps calculando la ruta de navegación hasta la ubicación referida
//Maps.setData(Uri.parse("google.navigation:///?q=Avenida Gran Vía Parque, Córdoba"))
//Opción 3: Se abre por defecto Maps mostrandonos en Street View la ubicacción referida //Maps.setData(Uri.parse("https://www.google.es/maps/place/Av.+Gran+V%C3%ADa+Parque,+14005+C%C3%B3rdoba/@37.8811742,-4.7933973,3a,75y,81.33h,90t/data=!3m4!1e1!3m2!1skl4LXSZcoyqzjw9wHFJZzw!2e0!4m2!3m1!1s0xd6cdf5f61664a1f:0x493a31e6c09a5034"))
.setPackage("com.google.android.apps.maps");
startActivity(Maps);
}catch (Exception e){
e.printStackTrace();
}
}
});
Basándome en el código anterior, del comentario que te escribí, aquí tienes la forma abreviada de poder enviar un correo perfectamente, pruébalo instalando el apk que generes, ya que el emulador no soporta la acción, pero vamos te puedo asegurar, que una vez instalado, funciona perfectamente y sin ningún problema.
ResponderEliminarAparte de ahorrar código, lo bueno que tiene, es que a la hora de abrir el diálogo para seleccionar un uso de cliente, solo y únicamente nos mostrara, Correo electrónico y Gmail, esto es gracias a que utilizamos ACTION_VIEW en vez de ACTION_SEND.
Espero te guste, un saludo Ramiro.
Button btnEnviar = (Button) findViewById(R.id.btnEnviar);
btnEnviar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
Intent correo = new Intent(Intent.ACTION_VIEW);
/*A continuación detallamos el correo, asunto y mensaje de texto a escribir, también
lo podemos concatenar ("..."+variable+"...") a tres variables String, enlazadas a su
vez a los valores que se escriban en sus respectivos textView*/
correo.setData(Uri.parse("mailto:tu@correo.com?subject=Curso Android Studio&body=Nueva forma abreviada de mandar un correo"));
startActivity(Intent.createChooser(correo, "Seleccione un cliente de correo"));
}catch (Exception e){
Toast.makeText(getApplicationContext(),
e.getMessage().toString(), Toast.LENGTH_LONG)
.show();
e.printStackTrace();
}
}
});
Ramiro ¿conoces de algún programa para pc, que conectando el smartphone o la tablet a él, nos muestre la pantalla de éstos en el pc? De forma que podamos hacer presentaciones a través de un proyector. Gracias
ResponderEliminarSabes que si lo he escuchado justamente lo que me decis, pero no le he prestado atención, es una clonación de lo que haces en tu celular en la pc, pero nunca lo he visto funcionando. Si lo vuelvo a escuchar te escribo.
EliminarSabes que si lo he escuchado justamente lo que me decis, pero no le he prestado atención, es una clonación de lo que haces en tu celular en la pc, pero nunca lo he visto funcionando. Si lo vuelvo a escuchar te escribo.
EliminarDe todas formas, porque no el emulador de AndroidStudio? sino genymotion para eclipse. Andan bastante bien
EliminarAgradezco tu respuesta Ramiro, tienes toda la razón, pero hay ciertas funcionalidades que me gustaría mostrar desde el dispositivo, ya que para una presentación no quedaría igual de vistoso. Aparte algunas de ellas el emulador no las soportaría, me refiero a tales como realizar llamadas en vivo, envío de WhatsApp, activación de bluetooth, detección de conexión de red de datos móviles o también wifi, verificación de conectividad A-GPS y GPS, y ni que decir tiene el servicio Maps, entre otras.
EliminarTe invito a que te descargues la aplicación que estoy desarrollando para una cafetería (http://mvhn.qr.ai) y de paso así me des tu opinión. Posiblemente tenga que hacer una presentación en breve para un congreso de hostelería, estoy muy ilusionado con la idea y las posibilidades laborales que podrían brindarme en un futuro. Ojalá así sea, como decís allá... acá en España el trabajo está muy mal!!!
Un saludo y gracias nuevamente Ramiro
1- la presentación no me gusta, parece que esta como tildada la secuencia de imagenes,
Eliminaral texto le falta un padding left y right
2- no funciona la rotación de pantalla
3- fondo gris es muy pobre, no me gusta
4- cuando entre a las políticas de privacidad, lo apreté para haber si seguía para abajo (scroll) pero me volvió para atrás y me molesto, porque no quería volver para atrás quería saber si tenia scroll.
5- me pierdo mucho en las transiciónes, nose cuando estoy llendo para adelante o para atrás, no le encuentro la jerarquia de los activities
6- al tenedor que va hacia atrás, a lo mejor le falta una texto, nose si es intuitivo para todos los usuarios.
7- el icono del rompecabezas, "acerca de".. no le encuentro relación entre una cosa y otra.. osea el nombre con el ícono
En conclusión, creo que esta la idea, pero que deberías organizarla de otra manera.
Le esta faltando un poco más de diseño y mejorar la navegación entro los activities
Mira estos dos
http://cursoandroidstudio.blogspot.com.ar/2014/09/webview.html (usa eso para las politicas de privacidad)
http://cursoandroidstudio.blogspot.com.ar/2014/08/actionbar-ir-atras.html (usa esto para ir atrás, y sacale el tenedor)
Espero que te sirva lo que te comente, saludos.
Me sirve y de mucho Ramiro, intento aprender más y más y la critica es una forma constructiva y positiva para mi de poder hacerlo, gracias de verdad por dedicarle tu tiempo y comentármelo a través de éstas líneas.
ResponderEliminarY no te falta razón, hay muchas incongruencias que intento pulir poco a poco, pero me lleva su tiempo. Nunca había desarrollado para Android, aunque si programe Java entre otros lenguajes, cuando cursaba mis estudios de Informática en la rama de programación, hace ya unos años que termine y he vuelto intentando recordar un poco de aquello.
Je, je! Pero he empezado mal, por vagancia quizás de no complicarme mucho, he desarrollado ésta aplicación con AppInventor, dándome cuenta muy rápidamente de sus limitaciones, e intento ponerme las pilas con el nuevo entorno de Android Studio, muy parecido a Eclipse, para dejar de lado lo anterior.
No me quiero enrollar mucho, pero tendré en estima tus criterios a la hora de mejorar ésta o cualquier otra aplicación que realice.
Gracias de veras por tus consejos.
acá google te explica sobre diseño https://developer.android.com/design/index.html sino lo mejor es trabajar con un diseñador grafico, aunq son pocos lo que saben diseñar para moviles.
EliminarPodrias decir la manera de cerrar el alertdialog?
ResponderEliminarbuilder..setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
Eliminar@Override
public void onClick(DialogInterface dialog, int id) {
// Your code when user clicked on Cancel
}
});
Que tal, excelente tutorial solo que tengo una duda, como podría hacerle en el codigo para asignar un correo del que lo envía ya predefinido? y en el código como implementarlo para que al destinatario le llegue, "el usuario example@gmail.com" te ha enviado un correo. De antemano gracias, Soy principiante
ResponderEliminarAhí sale, no has mirado el código.
EliminarEn el ejemplo dice "micorre@gmail.com" vos lo cambias por el tuyo
Muchisimas gracias!!!
ResponderEliminarBuen tutorial, me sirvio mucho.
Gracias.
Sigue asi.
buenisimo
EliminarHola Ramiro, estaba mirando tu código y me funciona muy bien, pero tengo un inconveniente estoy agregando un alertDialog personalizado al método del "botón atrás" que se encuentra en el dispositivo en el cual me pregunta si deseo salir de la actividad, en la opción de "SI" funciona perfectamente pero en la opción de "NO" no encuentro la forma de cerrar ese alertDialog personalizado sin afectar la actividad que estoy usando.
ResponderEliminarTe agradezco de ante mano tu atención y colaboración.
El codigo que utilizo es el siguiente:
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
LayoutInflater inflater = getLayoutInflater();
View dialoglayout = inflater.inflate(R.layout.s_btn_atras, null);
Button btnSalir = (Button) dialoglayout.findViewById(R.id.btn_si);
btnSalir.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
aceptar();
finish();
}
});
Button btnContinuar = (Button) dialoglayout.findViewById(R.id.btn_no);
btnContinuar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
AlertDialog.Builder builder = new AlertDialog.Builder(N_Perceptiva.this);
builder.setView(dialoglayout);
builder.show();
}
return super.onKeyDown(keyCode, event);
}
Una consulta, como podria personalizar mi spinner?
ResponderEliminarHola muy bueno tu código, pero tengo una duda, agregue un boton de CANCELAR para quitar el alertDialog pero no logro quitarlo, me puedes ayudar?
ResponderEliminarExcelente tutorial, por no hablar de todo lo aprendido en otros gracias por sus APORTES, GRACIAS desde Colombia...
ResponderEliminarun saludo !!!
hola amigo, me puedes ayudar con algo, lo que pasa esque tengo una actividad que tiene un boton y cuando le doy a ese boton me trae un fragmento que contiene un boton flotante cuando le doy a ese boton me trae un dialogo personalizado, como hago para que cuando ingrese los parametros en ese EditText me los muestre en el fragmmento?
ResponderEliminar