Android的通知时startActivity意图已经完成? [英] android notify when startActivity intent has completed?

查看:150
本文介绍了Android的通知时startActivity意图已经完成?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要能够告诉时衍生的活动(通过意向)已完成,会怎么办呢?

这是我有:

  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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆