gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 08:36:04 26 4
gpt4 key购买 nike

我正在尝试通过 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 2 添加到 onClick 中的队列。 现在两个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com