java - 使用 Intent 向多个联系人发送消息

标签 java android sms

我正在尝试通过 Intent 通过内置短信应用程序发送消息。它工作正常。这是我的代码

public class Main_Act extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button startBtn = (Button) findViewById(R.id.button);
    startBtn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {
            if(sendSMS()) {
                Intent intent = new Intent(Main_Act.this, Sample.class);
                startActivity(intent);
            }
        }
    });
}

protected boolean sendSMS() {
    ArrayList<String> nums = new ArrayList<String>();
    nums.add("111111111");
    nums.add("222222222");
    Log.i("Send SMS", "");
    Intent smsIntent = new Intent(Intent.ACTION_VIEW);

    smsIntent.setData(Uri.parse("smsto:"));
    smsIntent.setType("vnd.android-dir/mms-sms");
    smsIntent.putExtra("address"  ,nums);
    smsIntent.putExtra("sms_body"  , "Test ");

    try {
        startActivity(smsIntent);
        finish();
        return true;
    }
    catch (android.content.ActivityNotFoundException ex) {
        Toast.makeText(Main_Act.this,
                "SMS faild, please try again later.", Toast.LENGTH_SHORT).show();
        return false;
    }
}
}

但问题是它会导航到另一个 Activity ,而无需单击短信应用程序中的发送按钮。仅在单击消息传递应用程序中的发送按钮后,它才应转到另一个 Activity 。谁能帮我解决这个问题,先谢谢了。

最佳答案

让我们澄清一下代码中的一个小误解: 您不应像此处那样尝试在代码的同一部分/运行中启动这两个 Intent 。

startActivity 不会直接执行到 Activity ,然后在 Activity 执行完成时返回到代码中的同一位置。相反,它会异步排队执行 Intent 。然后你的代码将另一个 Intent 排队等待执行。当前代码完成后(在本例中,当按钮 onClick() 方法结束时)Android 队列管理可以开始挑选队列。可能第一个 Intent 很快就会执行,然后直接被第二个 Intent 的立即执行溢出。

总而言之,您首先在 sendSMS 中将一个 Intent 添加到队列中,然后在 onClick 中将 Intent 2 添加到队列中,然后再离开。 现在两个 Intent 都已执行。

您需要做的是将 sendSMS 代码更改为:

Intent smsIntent = new Intent(Intent.ACTION_VIEW);
smsIntent.setData(Uri.parse("smsto:"));
smsIntent.setType("vnd.android-dir/mms-sms");
smsIntent.putExtra("address"  ,nums);
smsIntent.putExtra("sms_body"  , "Test ");
// To force the SMS app to return immediately after sent SMS
smsIntent.putExtra("exit_on_sent", true); 
startActivityForResult(smsIntent, MY_SMS_REQUEST_RESPONSE_CODE);

请注意 startActivityForResult() 方法,该方法指示我们希望 Android 返回,以及额外的“exit_on_sent”,以强制快速返回。

MY_SMS_REQUEST_RESPONSE_CODE 只是您选择的任何随机代码,用于识别回调方法中的返回结果(即使您当前不期望任何其他返回结果,将来也可能会有一些)。

接下来要做的就是删除第二个 Intent 创建和排队。相反,您实现以下回调方法(添加到此 Activity ):

@Override
protected void onActivityResult(
        int callbackIdentifier, int resultCode, Intent intent) {
    // Is this the expected sendSMS callback ?
    if (callbackIdentifier== MY_SMS_REQUEST_RESPONSE_CODE) { 
        if (resultCode == RESULT_OK) {
          // Continue where you left off (e.g. execute intent 2)
          Intent intent = new Intent(Main_Act.this, Sample.class);
          startActivity(intent);            
        } else if (resultCode == RESULT_CANCELED) {
            // Error handling/retrying etc
        }
    }
    // Support inherited callback functions
    super.onActivityResult(callbackIdentifier,resultCode,intent);
}

关于java - 使用 Intent 向多个联系人发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36600202/

相关文章:

android - 什么是百分比支持库的 minSDK?

iphone - MFI 可以实现什么?

java - cxf 将源文件放在目标中但编译器看不到它们?

java - 多态性——理解正确吗? (JAVA)

java - 将 JList 复制到 arrayList 时出错

java - 为什么编译器不使用断言来优化?

android - 自定义按钮不适用于 OnTouchListener

android - 在 Thread 捕获 UncaughtException 之前上下文会发生什么

带有 pendingIntents 的 Android SendMultipartTextMessage,所有部分的额外值都相同

c# - 有什么办法可以发短信吗?