首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

smsManager不会发送短信,也不会在应用程序中请求权限,尽管我在代码中请求了权限

smsManager是Android平台上的一个类,用于发送短信。它提供了一组方法,可以直接发送短信到指定的手机号码。

在Android应用程序中使用smsManager发送短信之前,需要在AndroidManifest.xml文件中声明发送短信的权限。权限声明示例:

代码语言:txt
复制
<uses-permission android:name="android.permission.SEND_SMS" />

然后,在应用程序的代码中,可以使用smsManager的sendTextMessage方法发送短信。示例代码如下:

代码语言:txt
复制
import android.telephony.SmsManager;

public class MainActivity extends AppCompatActivity {
    private static final String PHONE_NUMBER = "1234567890";
    private static final String MESSAGE = "Hello, World!";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 检查是否有发送短信的权限
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.SEND_SMS)
                != PackageManager.PERMISSION_GRANTED) {
            // 如果没有权限,则请求权限
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.SEND_SMS},
                    PERMISSION_REQUEST_SEND_SMS);
        } else {
            // 如果有权限,则发送短信
            sendSMS();
        }
    }

    private void sendSMS() {
        SmsManager smsManager = SmsManager.getDefault();
        smsManager.sendTextMessage(PHONE_NUMBER, null, MESSAGE, null, null);
    }

    // 处理权限请求的结果
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                           @NonNull int[] grantResults) {
        if (requestCode == PERMISSION_REQUEST_SEND_SMS) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // 如果用户授予了发送短信的权限,则发送短信
                sendSMS();
            } else {
                // 如果用户拒绝了发送短信的权限,则给出相应的提示
                Toast.makeText(this, "发送短信的权限被拒绝", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

在上述代码中,首先检查是否有发送短信的权限,如果没有则请求权限。如果有权限,则使用smsManager的sendTextMessage方法发送短信。

需要注意的是,smsManager发送短信是通过手机的SIM卡进行的,因此需要确保手机插入了有效的SIM卡,并且有足够的信号强度来发送短信。

推荐的腾讯云相关产品:腾讯云短信服务(SMS),它是腾讯云提供的一项短信发送服务,可以帮助开发者快速、稳定地发送短信。腾讯云短信服务具有高可用性、高并发能力和全球覆盖的特点,适用于各种短信发送场景。更多关于腾讯云短信服务的信息和产品介绍可以参考腾讯云官方网站的链接:腾讯云短信服务

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Android开发笔记(五十五)手机设备基本操作

    手机的基本信息分两类,一类是与电话有关的信息,另一类是设备自身的信息。 与电话有关的信息可由TelephonyManager类获得,常用的参数与对应的方法如下所示: 网络运营商名称 : getNetworkOperatorName 网络运营商编号 : getNetworkOperator,返回五位数字,前三位表示国家代码(中国的为460),后两位表示运营商代码(中国移动为0,中国联通为1,中国电信为2) 手机类型 : getPhoneType 网络类型 : getNetworkType获得细分类型,getNetworkClass获得大类如2G/3G/4G SIM卡状态 : getSimState SIM卡运营商名称 : getSimOperatorName SIM卡运营商编号 : getSimOperator SIM卡序列号 : getSimSerialNumber IMSI : getSubscriberId IMEI : getDeviceId 手机号码 : 实测发现多数情况下getLine1Number和getMsisdn都无法正确取到号码,但是很多APP又需要用户的手机号,那又得想办法获取号码,获取的方法大致有如下几种: 1、用户首次使用,提示用户注册手机号,然后保存起来,下次就能取到手机号了; 2、APP自动用该手机发一条免费短信(比如向10086发),然后到发件箱中寻找该短信的发送号码; 3、如果能连到运营商的支撑系统,那么根据IMSI去后台系统查询手机号,这也是可以的; 设备自身的信息可由Build类获得,常用的参数与对应的方法如下所示: 手机厂商 : Build.MANUFACTURER 手机品牌 : Build.BRAND 手机型号 : Build.MODEL 设备名称 : Build.DEVICE CPU指令 : Build.CPU_ABI 芯片型号 : Build.HARDWARE 手机序列号 : Build.SERIAL SDK版本 : Build.VERSION.SDK_INT 系统版本 : Build.VERSION.RELEASE 版本代号 : Build.VERSION.CODENAME

    02
    领券