在Android开发中,实现给本机发送短信的功能主要涉及到权限申请、使用SmsManager
类以及处理用户交互和反馈,以下是详细的步骤和代码示例:
1、添加权限:
在AndroidManifest.xml文件中添加发送短信的权限声明。
<uses-permission android:name="android.permission.SEND_SMS"/>
2、布局文件(activity_send_sms.xml):
创建一个简单的用户界面,包含输入电话号码和短信内容的文本框,以及一个发送按钮。
<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/phone_number" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入电话号码" /> <EditText android:id="@+id/message_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入短信内容" android:layout_marginTop="8dp" /> <Button android:id="@+id/send_button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="发送短信" android:layout_marginTop="16dp" /> </LinearLayout>
3、Java代码实现(SendSmsActivity.java):
在Activity中获取用户输入的电话号码和短信内容,并调用SmsManager
发送短信。
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 android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; public class SendSmsActivity extends AppCompatActivity { private static final int SMS_PERMISSION_CODE = 101; private EditText phoneNumber; private EditText messageContent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_send_sms); phoneNumber = findViewById(R.id.phone_number); messageContent = findViewById(R.id.message_content); Button sendButton = findViewById(R.id.send_button); sendButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { sendSms(); } }); } private void sendSms() { String number = phoneNumber.getText().toString(); String message = messageContent.getText().toString(); // 请求发送短信权限 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SEND_SMS}, SMS_PERMISSION_CODE); } else { SmsManager smsManager = SmsManager.getDefault(); smsManager.sendTextMessage(number, null, message, null, null); Toast.makeText(this, "短信发送成功", Toast.LENGTH_SHORT).show(); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == SMS_PERMISSION_CODE) { if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { sendSms(); } else { Toast.makeText(this, "权限被拒绝,无法发送短信", Toast.LENGTH_SHORT).show(); } } } }
1、问题:如何在Android中检查是否已经获得了发送短信的权限?
回答:可以使用ActivityCompat.checkSelfPermission()
方法来检查是否已经获得了发送短信的权限,如果返回PackageManager.PERMISSION_GRANTED
,则表示已经获得了权限;否则表示未获得权限,需要请求权限。
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) { // 请求发送短信权限 }
2、问题:在Android中,如何通过ADB命令给本机发送短信?
回答:可以通过ADB命令结合Intent来实现给本机发送短信,具体命令如下:
adb shell am start -a android.intent.action.SENDTO -d sms:PHONE_NUMBER --es sms_body "MESSAGE_BODY" --ez exit_on_sent true
PHONE_NUMBER
是接收短信的手机号码,MESSAGE_BODY
是短信的内容,执行该命令后,系统会弹出发送短信的界面,并自动填写好接收号码和短信内容。