Android——SMS接收发短信与运行权限

好久没写了,最近学习Android的相关知识,包括UI组件与布局、Activity生命周期等,而这次要讲的是,Broadcast Receiver的相关知识,主要是接收发短信,SmsManagerSmsManages的使用。还有就是这里涉及到的权限问题,在清单文件中加入相关的权限,还有就是运行权限。具体请看下面例子:

发短信(SmsManager:

发短信比较简单,我们可以定义一个类,通过传参(包括号码与内容)的方式进行进一步操作。

 

import android.telephony.SmsManager;
import java.util.ArrayList;

 

public class SendMsg {
    String message;
    String phone;

    public SendMsg(String message, String phone) {
        this.message = message;
        this.phone = phone;
        SmsManager smsManager = SmsManager.getDefault();
        ArrayList<String> list = smsManager.divideMessage(message);
        for (String text:list) {
            smsManager.sendTextMessage(phone, null, text, null, null);
        }
    }
}

manifest清单文件中加入

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

在主MainActivity中加入运行权限

...

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

 

if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.SEND_SMS) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.SEND_SMS}, 1);
}

}

 

接着就是重写onRequestPermissionsResult

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch (requestCode) {
        case 1:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                //这里写操作 如send(); send函数中New SendMsg 号码,内容);
            } else {
                Toast.makeText(this, "你没启动权限", Toast.LENGTH_SHORT).show();
            }
            break;

       default:
    }
}

 

 

在接下来就是接收短信,方式有很多这里就不一一介绍了,主要讲讲使用Broadcast。而设计到广播,就需要了解广播的相关知识,具体不会讲很多以后慢慢更新。

广播需要创建一个Receiver进行监听短信的查收。如下:

 

import...

public class SMSReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

String phone = "10086";

String num, con;
//读取data中存入的安全号码
Bundle bundle = intent.getExtras();
if (bundle != null) {
    Object[] objs = (Object[]) bundle.get("pdus");
    SmsMessage[] smsMessages = new SmsMessage[objs.length];
    for (int i = 0; i < objs.length; i++) {
        smsMessages[i] = SmsMessage.createFromPdu((byte[]) objs[i]);
        num = smsMessages[i].getDisplayOriginatingAddress(); //短信的号码
        con = smsMessages[i].getDisplayMessageBody(); //短信的内容


        Toast.makeText(context, num + "----" + con, Toast.LENGTH_SHORT).show();

        System.out.println("号码:" + num + "内容:" + con);
        SendMsg sendMsg = new SendMsg("号码:" + num + "内容:" + con, phone);

 

if (num.equals(phone)) {

//这里可以写一些自己的其他操作 (如包括匹配相应的号码进行操作)

}

 }
        abortBroadcast();  //这里是对短信进行拦截但是并不能实现
    }
}

 

写完receiver之后就可以进行注册(静态与动态),这里就写静态了如下:

<receiver
    android:name=".SMSReceiver"
    android:enabled="true"
    android:exported="true">
     <intent-filter android:priority="1000"> <!-- 这是优先权--!>
        <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
     </intent-filter>
</receiver>

上面的intent-filter便是静态注册了,打开APP便进行短信监听

还有就是权限问题:

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

运行权限:

if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.RECEIVE_SMS)!= PackageManager.PERMISSION_GRANTED){
    ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.RECEIVE_SMS},2);
}

onRequestPermissionsResult方法如上

 

转载于:https://www.cnblogs.com/llw1996/p/6721348.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值