SmsManager
类。先获取其实例,然后通过 sendTextMessage
方法发送短信,需提供接收者号码、短信内容等参数。
在Android开发中,调用短信接口发送短信是一项常见的功能需求,以下是详细的实现步骤、代码示例以及相关注意事项:
1、创建Android项目:使用Android Studio创建一个新的Android项目,并选择合适的模板(如Empty Activity)。
2、添加必要的权限:在AndroidManifest.xml文件中声明发送短信的权限。
3、设计用户界面:在activity_main.xml中设计一个包含电话号码输入框、短信内容输入框和发送按钮的用户界面。
4、编写发送短信的代码:在MainActivity.java或MainActivity.kt中实现发送短信的逻辑。
5、测试功能:运行应用并测试发送短信的功能。
使用Android Studio创建一个新的Android项目,并命名为“SMSApp”或其他你喜欢的名称,选择Empty Activity模板作为起始点。
在AndroidManifest.xml文件中添加以下权限声明,以允许应用发送短信:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.smsapp"> <uses-permission android:name="android.permission.SEND_SMS"/> <application ... </application> </manifest>
在res/layout/activity_main.xml文件中设计一个简单的用户界面,包含一个EditText用于输入电话号码,另一个EditText用于输入短信内容,以及一个Button用于发送短信:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp"> <EditText android:id="@+id/phoneNumber" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入电话号码" /> <EditText android:id="@+id/message" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入短信内容" android:minLines="4" android:gravity="top" /> <Button android:id="@+id/sendButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="发送短信" /> </LinearLayout>
在MainActivity.java或MainActivity.kt中编写发送短信的逻辑,需要在类中导入必要的库:
import android.Manifest; import android.content.pm.PackageManager; import android.os.Bundle; import android.telephony.SmsManager; import android.view.View; import android.widget.Button; import android.widget.EditText; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat;
在onCreate方法中初始化UI组件,并为发送按钮设置点击事件监听器:
public class MainActivity extends AppCompatActivity { private static final int REQUEST_SEND_SMS = 1; private EditText phoneNumber; private EditText message; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); phoneNumber = findViewById(R.id.phoneNumber); message = findViewById(R.id.message); Button sendButton = findViewById(R.id.sendButton); sendButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sendSms(); } }); } private void sendSms() { String phone = phoneNumber.getText().toString(); String msg = message.getText().toString(); if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SEND_SMS}, REQUEST_SEND_SMS); } else { SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(phone, null, msg, null, null); Toast.makeText(getApplicationContext(), "短信已发送", Toast.LENGTH_LONG).show(); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == REQUEST_SEND_SMS) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { sendSms(); } else { Toast.makeText(getApplicationContext(), "发送短信权限被拒绝", Toast.LENGTH_LONG).show(); } } } }
运行应用,输入电话号码和短信内容,然后点击发送按钮,如果一切正常,应用将尝试发送短信,并在发送成功后显示一条消息,由于Android 6.0及以上版本的动态权限机制,应用可能需要请求发送短信的权限,如果用户拒绝了该权限请求,应用将无法发送短信。
问题1:如何在Android中调用系统发送短信的界面?
解答:可以通过以下方式调起系统发短信功能:
public void doSendSMSTo(String phoneNumber, String message) { if (PhoneNumberUtils.isGlobalPhoneNumber(phoneNumber)) { Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:" + phoneNumber)); intent.putExtra("sms_body", message); startActivity(intent); } }
这种方法会调起系统的短信应用,并将电话号码和短信内容填充到短信编辑界面中,用户确认后即可发送,但请注意,这种方式不会直接发送短信,而是让用户手动完成发送操作。
问题2:如何处理短信发送状态和接收状态的监听?
解答:为了处理短信发送状态和接收状态的监听,可以使用PendingIntent来设置广播接收器,以下是一个简单的示例:
// 处理返回的发送状态 String SENT_SMS_ACTION = "SENT_SMS_ACTION"; Intent sentIntent = new Intent(SENT_SMS_ACTION); PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, sentIntent, 0); context.registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context _context, Intent _intent) { switch (getResultCode()) { case Activity.RESULT_OK: Toast.makeText(context, "短信发送成功", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: break; case SmsManager.RESULT_ERROR_RADIO_OFF: break; case SmsManager.RESULT_ERROR_NULL_PDU: break; } } }, new IntentFilter(SENT_SMS_ACTION)); // 处理返回的接收状态 String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION"; Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION); PendingIntent deliverPI = PendingIntent.getBroadcast(context, 0, deliverIntent, 0); context.registerReceiver(new BroadcastReceiver() { @Override public void onReceive(Context _context, Intent _intent) { Toast.makeText(context, "收信人已经成功接收", Toast.LENGTH_SHORT).show(); } }, new IntentFilter(DELIVERED_SMS_ACTION));