当另一个意图完成时开始一个意图
我在我的Android应用程序中遇到了一些麻烦。 当另一个意图完成时,我需要开始一个意图。 问题是这两个意图是同时启动(我不知道为什么)。 这是我的代码:
在这个对话框中,我询问用户是否想在发送电子邮件之前拍照(当然,我想发送电子邮件与照片)。 好?
private Dialog comprobarFoto() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("¿Desea adjuntar una foto con este mensaje de su posición actual?");
builder.setPositiveButton("Si", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
hacerFoto();
enviarMail(true);
dialog.cancel();
}
});
builder.setNegativeButton("No", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
enviarMail(false);
dialog.cancel();
}
});
return builder.create();
}
这里是我创建电子邮件的方法
private void enviarMail(boolean foto) {
if(locMail!=null) {
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("message/rfc822");
i.putExtra(Intent.EXTRA_SUBJECT,"Quiero que sepas donde estoy!");
if(foto && fotoPath != null && fotoPath.length()>0) {
i.putExtra(Intent.EXTRA_STREAM, Uri.parse(fotoPath));
}
i.putExtra(Intent.EXTRA_TEXT,"Hola!n Estoy en la dirección:" +
"n" + localizarDireccion() +
"nn(lat= " + dfmail.format(locMail.getLatitude()) + ")" +
"n(long=" + dfmail.format(locMail.getLongitude()) + ") " +
"n n[Enviado desde GeoLocation]" );
startActivity(i);
}else{
dialogError("No se puede encontrar una localización").show();
}
}
这是我拍摄照片的方法:
private void hacerFoto() {
//El gran quebradero de cabeza aquí fue que no le daba permisos a la aplicación para escribir en la tarjeta. En el manifest se puede comprobar esta directiva
File carpeta = new File(Environment.getExternalStorageDirectory () + "/GeoLocation/images");
if(!carpeta.exists()){
carpeta.mkdirs();
}
fotoPath = Environment.getExternalStorageDirectory() + "/GeoLocation/images/GLPict"+cogerFecha()+".jpg";
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Uri output = Uri.fromFile(new File(fotoPath));
intent.putExtra(MediaStore.EXTRA_OUTPUT, output);
startActivityForResult(intent, 1);
}
问题是,sendMail(enviarMail)的意图不等第一种方法takePhoto(hacerFoto)完成。 有没有一些方法可以让我对sendMail意图等待方法takePhoto完成后再说?
感谢所有和难过我的英语!
首先启动像startActivityForResult(intent, requestCode)
这样的startActivityForResult(intent, requestCode)
并在返回时调用onActivityResult
,然后从那里开始第二个意图。
编辑::做到这一点::
private Dialog comprobarFoto() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("¿Desea adjuntar una foto con este mensaje de su posición actual?");
builder.setPositiveButton("Si", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
hacerFoto();
///////////// do not call enviarMail(true) from here, call it from onActivityResult, see below //////////////////
dialog.cancel();
}
});
builder.setNegativeButton("No", new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
enviarMail(false);
dialog.cancel();
}
});
return builder.create();
}
@Override
protected void onActivityResult(int reqCode,int resultCode,Intent intent)
{
if(resultCode == Activity.RESULT_OK)
{
if( reqCode == 1)
enviarMail(true); //////// call from here ///////
}
}
你不能使用onFinish()或onStop()来启动下一个意图吗?
链接地址: http://www.djcxy.com/p/23261.html上一篇: Start an intent when another intent has finished
下一篇: Send Email in Android using the default android app(Builtin Email application)