Android的通知时startActivity意图已经完成? [英] android notify when startActivity intent has completed?
问题描述
我需要能够告诉时衍生的活动(通过意向)已完成,会怎么办呢?
这是我有:
alertDialog.setButton2(文本,新DialogInterface.OnClickListener(){
@覆盖
公共无效的onClick(DialogInterface对话,诠释它){
字符串URI =smsto:+;
意向意图=新的意图(Intent.ACTION_SENDTO,Uri.parse(URI));
intent.putExtra(sms_body,PASSWORD_GENERATOR
.generatePasswordForSeed(seedText,hourToUse));
intent.putExtra(compose_mode,真正的);
// - 打开短信活动
startActivity(意向);
// - 我现在需要重新调用活动,但经过短信活动已经完成。眼下短信关闭的时候了,因为我在没有了等待......
完();
startActivity(getIntent());
}
});
修改#1
每下面的建议,我已经做了一些修改。然而,现在启动的短信活动只是坐在那儿,一旦文本发送。我不知道如何得到它返回到调用活动。这是我有:
alertDialog.setButton2(文本,新DialogInterface.OnClickListener(){
@覆盖
公共无效的onClick(DialogInterface对话,诠释它){
字符串URI =smsto:+;
意向意图=新的意图(Intent.ACTION_SENDTO,Uri.parse(URI));
intent.putExtra(sms_body,PASSWORD_GENERATOR
.generatePasswordForSeed(seedText,hourToUse));
intent.putExtra(compose_mode,真正的);
startActivityForResult(意向,Activity.RESULT_OK);
registerReceiver(新BroadcastReceiver的(){
@覆盖
公共无效的onReceive(上下文的背景下,意图意图){
完();
startActivity(getIntent());
}
},新的IntentFilter(SMS_SENT));
ContentResolver的ContentResolver的= getContentResolver();
处理程序处理程序=新的处理程序();
contentResolver.registerContentObserver(URI
.parse(内容://短信),真,新ContentObserver(
处理){
@覆盖
公共布尔deliverSelfNotifications(){
的setResult(Activity.RESULT_OK);
完();
返回super.deliverSelfNotifications();
}
@覆盖
公共无效的onChange(布尔selfChange){
super.onChange(selfChange);
的setResult(Activity.RESULT_OK);
完();
}
});
}
});
alertDialog.show();
}
@覆盖
保护无效onActivityResult(INT申请code,INT结果code,意图数据){
完();
startActivity(getIntent());
}
对于第二个问题跟帖回答: 出于好奇,你有没有考虑发送,而不需要创建活动的文字?我想问的原因是因为它似乎,从我可以告诉,没有用户体验正在发生的事情在您的短信活动。如果你没有意见,用户交互,那么也许仅仅定义一个线程或创建一个辅助类将完成这项工作。
原来的答案为第一个问题: 尝试使用startActivityForResult(意向,INT)。您当前的活动可以得到通知时,文本信息活动的结束。
I need to be able to tell when a spawned activity (via an intent) has completed, how would I do so?
This is what I have:
alertDialog.setButton2("Text", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String uri = "smsto:" + "";
Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse(uri));
intent.putExtra("sms_body", PASSWORD_GENERATOR
.generatePasswordForSeed(seedText, hourToUse));
intent.putExtra("compose_mode", true);
// -- open the text message activity
startActivity(intent);
// -- I need to reset the calling activity now, but AFTER the text message activity has completed. Right now the SMS closes right away as I have no wait in...
finish();
startActivity(getIntent());
}
});
EDIT #1
Per the suggestions below, I've made some modifications. Now, however, the launched SMS activity just "sits there" once the text is sent. I can't figure out how to get it to return to the calling activity. This is what I have:
alertDialog.setButton2("Text", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String uri = "smsto:" + "";
Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse(uri));
intent.putExtra("sms_body", PASSWORD_GENERATOR
.generatePasswordForSeed(seedText, hourToUse));
intent.putExtra("compose_mode", true);
startActivityForResult(intent, Activity.RESULT_OK);
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
finish();
startActivity(getIntent());
}
}, new IntentFilter("SMS_SENT"));
ContentResolver contentResolver = getContentResolver();
Handler handler = new Handler();
contentResolver.registerContentObserver(Uri
.parse("content://sms"), true, new ContentObserver(
handler) {
@Override
public boolean deliverSelfNotifications() {
setResult(Activity.RESULT_OK);
finish();
return super.deliverSelfNotifications();
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
setResult(Activity.RESULT_OK);
finish();
}
});
}
});
alertDialog.show();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
finish();
startActivity(getIntent());
}
Followup Answer for second question: Out of curiosity, have you considered sending the text without creating an activity? The reason I ask is because it seems, from what I can tell, no user experience is happening within your SMS activity. If you don't have views and user interactions then maybe just defining a thread or creating a helper class would do the job.
Original Answer for first question: Try using startActivityForResult(Intent, int). Your current activity can get notified when the text message activity finishes.
这篇关于Android的通知时startActivity意图已经完成?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!