2013-11-01 3 views
0

Я пытаюсь разработать библиотеку для подбора кода в будущих проектах. Я сделал способ отправить электронное письмо, в котором он работал.gmailIntent от статического метода библиотеки проекта android

Старые пути (работы):

public void onClick(View v) { 
    // Hay que hacer un "try" porque si no se ha puesto nada el alguno de los EditText daría un error y se cerraría la app. 
    try { 
     // Recogemos lo insertado en los campos de texto: 
     AD.NAME_LIST = editTextNameList.getText().toString(); 
     AD.SURNAME_LIST = editTextSurnameList.getText().toString(); 

     System.out.println("AD.NAME_LIST: "+AD.NAME_LIST); 
     System.out.println("AD.SURNAME_LIST: "+AD.SURNAME_LIST); 

     dialog.cancel(); // Primero de nada cerramos la ventana de diálogo 

     Intent gmailIntent = new Intent(); 
     gmailIntent.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail"); // Usamos directamente gmail 
     gmailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{AD.EMAIL}); // Dirección de correo electrónico 
     gmailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, AD.EMAIL_SUBJECT); // Asunto 
     gmailIntent.putExtra(android.content.Intent.EXTRA_TEXT, AD.SURNAME_LIST+" "+AD.NAME_LIST); // Cuerpo del e-mail 

     try { 
      startActivity(gmailIntent); 
      Toast.makeText(getApplicationContext(), "El e-mail se ha generado correctamente.\n\nSimplemente DALE A ENVIAR.\n\nRecibirás un correo electrónico de confirmación.", Toast.LENGTH_LONG).show(); 
     } catch(ActivityNotFoundException ex) { 
      Toast.makeText(getApplicationContext(), "El cliente de correo electrónico gmail no está disponible.", Toast.LENGTH_SHORT).show(); 
      ex.printStackTrace(); 
     } 

    } catch (Exception e) { 
     Toast.makeText(getApplicationContext(), "No ha rellenado correctamente alguno de los campos.\n\nInténtelo de nuevo.", Toast.LENGTH_LONG).show(); 
     doorListBtn(v); // Sacamos de nuevo la ventana de diálogo 
    } 
} 

Прямо сейчас я это сделал:

public void onClick(View v) { 
    // Recogemos lo insertado en los campos de texto: 
    AD.names_list[0] = editTextNameList.getText().toString(); 
    AD.surnames_list[0] = editTextSurnameList.getText().toString(); 

    System.out.println("Nombre: "+AD.names_list[0]); 
    System.out.println("Apellidos: "+AD.surnames_list[0]); 

    dialog.cancel(); // Primero de nada cerramos la ventana de diálogo 

    // Hay que hacer un "try" porque si no se ha puesto nada en alguno de los EditText daría un error y se cerraría la app: 
    try { 
     G_A.sendEmailWithNames(getApplicationContext(), AD.EMAIL, AD.EMAIL_SUBJECT, AD.names_list, AD.surnames_list); 
    } catch (Exception e) { 
     G_A.showToast(
       getApplicationContext(), 
       "No ha rellenado correctamente alguno de los campos.\n\nInténtelo de nuevo.", 
       Toast.LENGTH_LONG); 

     doorListBtn(v); // Sacamos de nuevo la ventana de diálogo 
    } 
} 

G_A является андроидом проект библиотеки. Он имеет следующие методы:

/** 
* Envía un e-mail con los nombres y apellidos de la gente que ha sido apuntada. 
* Las casillas de 'names' y 'surnames' se corresponden. 
* @param context 
* @param names Nombres. 
* @param surnames Apellidos. 
*/ 
public static void sendEmailWithNames(Context context, String email, String emailSubject, String[] names, String[] surnames) { 
    Intent gmailIntent = new Intent(); 
    gmailIntent.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail"); // Usamos directamente gmail 
    gmailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{email}); // Dirección de correo electrónico 
    gmailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, emailSubject); // Asunto 
    gmailIntent.putExtra(android.content.Intent.EXTRA_TEXT, names[0]+" "+surnames[0]); // Cuerpo del e-mail 

    System.out.println("email: "+email); 
    System.out.println("emailSubject: "+emailSubject); 
    System.out.println("names[0]: "+names[0]); 
    System.out.println("surnames[0]: "+surnames[0]); 

    try { 
     context.startActivity(gmailIntent); // Hacemos el intento dentro del contexto de la actividad desde donde se ha llamado 
     G_A.showToast(context, "El e-mail se ha generado correctamente.\n\nSimplemente DALE A ENVIAR.\n\nRecibirás un correo electrónico de confirmación.", Toast.LENGTH_LONG); 
    } catch(ActivityNotFoundException ex) { 
     G_A.showToast(context, "El cliente de correo electrónico gmail no está disponible.", Toast.LENGTH_SHORT); 
     ex.printStackTrace(); 
    } 
} // sendEmailWithNames() 

/** 
* Muestra un Toast. 
* @param context 
* @param message Mensaje a mostrar. 
* @param duration Tiempo que el mensaje es mostrado por pantalla. 
*/ 
public static void showToast(Context context, String message, int duration) { 
    Toast.makeText(context, message, duration).show(); 
} // showToast() 

showToast работает, но другой не работает. Я думаю, что ошибка просто, когда я звоню startActivity:

context.startActivity(gmailIntent); // Hacemos el intento dentro del contexto de la actividad desde donde se ha llamado 

Но я не могу увидеть ошибку LogCat или я делаю что-то неправильно ... Я не знаю. PS: Класс G_A проекта G_A не является активностью.

+0

Я добавил в G_A проект библиотеки проекта, где я запустить приложение. –

+0

Неудача, когда я вызываю startActivity (gmailIntent). Это связано с контекстом. Но я пока этого не знаю ... –

ответ

0

Ну, я решить эту проблему следующим образом:

метод G_A sendEmailWithNames() возвращает Intent.

/** 
* Envía un e-mail con los nombres y apellidos de la gente que ha sido apuntada. 
* Las casillas de 'names' y 'surnames' se corresponden. 
* @param context 
* @param names Nombres. 
* @param surnames Apellidos. 
*/ 
public static Intent sendEmailWithNames(Context context, String email, String emailSubject, String[] names, String[] surnames) { 
    Intent gmailIntent = new Intent(); 
    gmailIntent.setClassName("com.google.android.gm", "com.google.android.gm.ComposeActivityGmail"); // Usamos directamente gmail 
    gmailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{email}); // Dirección de correo electrónico 
    gmailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, emailSubject); // Asunto 
    gmailIntent.putExtra(android.content.Intent.EXTRA_TEXT, names[0]+" "+surnames[0]); // Cuerpo del e-mail 

    System.out.println("email: "+email); 
    System.out.println("emailSubject: "+emailSubject); 
    System.out.println("names[0]: "+names[0]); 
    System.out.println("surnames[0]: "+surnames[0]); 

    try { 
     G_A.showToast(context, "El e-mail se ha generado correctamente.\n\nSimplemente DALE A ENVIAR.\n\nRecibirás un correo electrónico de confirmación.", Toast.LENGTH_LONG); 
    } catch(ActivityNotFoundException ex) { 
     G_A.showToast(context, "El cliente de correo electrónico gmail no está disponible.", Toast.LENGTH_SHORT); 
     ex.printStackTrace(); 
    } 

    return gmailIntent; 
} // sendEmailWithNames() 

Когда я называю этот метод из другого проекта, я делаю это:

Intent intent = G_A.sendEmailWithNames(context, AD.EMAIL, AD.EMAIL_SUBJECT, AD.names_list, AD.surnames_list); 
startActivity(intent); 
Смежные вопросы