android在startActivity意图完成时通知?

android在startActivity意图完成时通知?,android,android-activity,Android,Android Activity,我需要能够知道衍生活动(通过意图)何时完成,我将如何完成 这就是我所拥有的: alertDialog.setButton2("Text", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String uri = "smsto:" + ""; I

我需要能够知道衍生活动(通过意图)何时完成,我将如何完成

这就是我所拥有的:

    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());
        }
    });
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());
    }
编辑#1 根据下面的建议,我做了一些修改。然而,现在,一旦发送了短信,启动的短信活动就“坐在那里”。我不知道如何让它返回呼叫活动。这就是我所拥有的:

    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());
        }
    });
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());
    }

第二个问题的后续答案: 出于好奇,您是否考虑过在不创建活动的情况下发送文本?我问的原因是,据我所知,你的短信活动似乎没有用户体验。如果您没有视图和用户交互,那么可能只需要定义一个线程或创建一个helper类就可以了

第一个问题的原始答案:
尝试使用startActivityForResult(Intent,int)。当短信活动结束时,您当前的活动会收到通知。

使用
startActivityForResult(intent,positiveinteger)

做你想做的事,在开始的活动中,当你认为活动已成功完成时,执行
setResult(activity.RESULT\u OK)
finish()

在启动override
onActivityResult()方法的活动中。并测试您调用的活动是否完成了任务

永远不要使用
活动。对于
requestCode
,RESULT\u OK
,因为它是负常量。文档中说,将为每个正整数调用
onActivityResult()
方法
requestCode

重写并遵循这一点

如何启动活动以获得结果:

      static final int STATIC_RESULT=2; //positive > 0 integer.
      Intent i = new Intent("my.activity.startNewOne");
      i.putExtra("category", category);
    startActivityForResult(i, STATIC_RESULT);
在您的
startNewOne
活动中,您以如下结果完成:

    //after the job is done, use the method i mentioned in the comments to check if the sms is delivered/submitted. and proceed if true with this
    if(smsObject.getStatus()==0)//by the docs means successfuly sent
{
    Intent i = getIntent(); //get the intent that has been called, i.e you did called with startActivityForResult();
    i.putExtras(b);//put some data, in a bundle
    setResult(Activity.RESULT_OK, i);  //now you can use Activity.RESULT_OK, its irrelevant whats the resultCode    
    finish(); //finish the startNewOne activity
}
如何使用onActivityResult()方法:

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

          if (requestCode == STATIC_RESULT) //check if the request code is the one you've sent
          {
                 if (resultCode == Activity.RESULT_OK) 
                 {
                // this is successful mission, do with it.

                 {
                 } else
                         // the result code is different from the one you've finished with, do something else.
                     }
          }


        super.onActivityResult(requestCode, resultCode, data);

    }

不幸的是,您将不得不使用
smsmsmanager

使用以下命令:

您可以接收发送的
SMS\u

注意
确保您正在使用
onCreate()

重新启动呼叫活动要回答您的新问题,您可以将
exit\u on\u sent
添加到意图中,这将导致SMS活动在发送邀请后返回

smsIntent.putExtra("exit_on_sent", true);

不幸的是,它看起来仍然返回
活动的
resultCode
。RESULT\u CANCELLED
,无论您是这样做还是他们点击了后退按钮,因此您无法判断用户是否确实发送了文本。

您如何知道SMS活动何时成功完成?检查sms是否成功发送,如果已发送,则检查
setResult()
,然后检查
finish()
。别忘了权限:)你似乎不知道短信活动何时结束。您可以知道文本何时发送、何时接收等,但是没有像我在上面的代码中设置的那样连接到sms活动本身。我将编辑以显示我的意思。如果你想添加一个更完整的答案,我已经开始了50分的悬赏+1尽管如此:)我的“startone”活动是Intent.ACTION\u SENDTO,如果我改变我的意图,我就不会再发送短信了,对吗?你帮了我的忙,谢谢。虽然标题暗示了一个简单的解决方案(因此是一个问题),但我相信这篇文章本身表明还有更多的问题,而不是太多的问题。我相信我需要使用一个活动,我确实需要用户交互,因为我并不总是知道短信接收者是谁。如果你想添加一个更完整的答案,我已经开始了50分的悬赏+1尽管如此:)但我需要使用内置的sms意图。SmsManager允许我发送短信,但我希望用户使用内置的短信应用程序,而不仅仅是代表他们静态发送短信。嘿,@javamonkey79-这是怎么结束的?