首页 > 解决方案 > 从服务发送短信

问题描述

比赛发生时,我尝试从我的服务发送短信

我试图在我的服务中做接口并在其他活动中编写函数。但我不知道如何在服务中调用我的函数,以及是否有其他解决方案。

public interface smsSender{
       void sendSms(String phoneNum);
   } //the interface in my service

//in other class
@Override
   public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
       super.onRequestPermissionsResult(requestCode, permissions, grantResults);
       switch (requestCode)
       {
           case 0:
               if(grantResults.length >=0 && grantResults[0]== PackageManager.PERMISSION_GRANTED)
               {
                   sendSms("00000000");
               }
       }
   }

   @Override
   public void sendSms(String phoneNum) {
       int permissionCheck= ContextCompat.checkSelfPermission(this, android.Manifest.permission.SEND_SMS);
       if(permissionCheck == PackageManager.PERMISSION_GRANTED)
       {
           final SmsManager smgr = SmsManager.getDefault();

           DatabaseReference database = FirebaseDatabase.getInstance().getReference();

           smgr.sendTextMessage(phoneNum,null,"String in sms",null,null);




       }
       else
       {
           ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.SEND_SMS},0);
       }

   }


如何从服务中调用此功能,或者有更好的方法从服务中发送 SMS

标签: javaandroid

解决方案


首先确保 sens 短信权限在清单文件中声明为

<uses-permission android:name="android.permission.SEND_SMS"/>

接下来发送短信使用 SMSManager API

SmsManager smgr = SmsManager.getDefault();
smgr.sendTextMessage(MobileNumber,null,Message,null,null);

请找到以下示例代码

 try{
                SmsManager smgr = SmsManager.getDefault();
                smgr.sendTextMessage(txtMobile.getText().toString(),null,txtMessage.getText().toString(),null,null);
                Toast.makeText(MainActivity.this, "SMS Sent Successfully", Toast.LENGTH_SHORT).show();
            }
            catch (Exception e){
                Toast.makeText(MainActivity.this, "SMS Failed to Send, Please try again", Toast.LENGTH_SHORT).show();
            }

在服务中使用以下代码

 SmsManager sms = SmsManager.getDefault();
                                    // if message length is too long messages are divided
                                    List<String> messages = sms.divideMessage(message);
                                    for (String msg : messages) {

                                        PendingIntent sentIntent = PendingIntent.getBroadcast(context, 0, new Intent("SMS_SENT"), 0);
                                        PendingIntent deliveredIntent = PendingIntent.getBroadcast(context, 0, new Intent("SMS_DELIVERED"), 0);
                                        sms.sendTextMessage(phone, null, msg, sentIntent, deliveredIntent);

                                        Toast.makeText(context, "SMS Sent to: " + number, Toast.LENGTH_SHORT).show();
 }

推荐阅读