短信接收在Android系统中是通过监听系统广播来实现的,当手机接收到一条短信时,系统会发出一条值为“android.provider.Telephony.SMS_RECEIVED”的广播,每个应用程序都可以在广播接收器里对这个广播进行监听,收到广播时再从中解析出短信的内容即可。
具体实现步骤如下:
1、修改布局文件:在activity_main.xml
中添加两个TextView
用于显示短信的发送方和内容。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:layout_gravity="center_vertical" android:text="From:" /> <TextView android:id="@+id/sender" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" android:layout_gravity="center_vertical" android:text="Content:" /> <TextView android:id="@+id/content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" /> </LinearLayout> </LinearLayout>
2、修改MainActivity代码:在MainActivity
中获取TextView
实例,并创建一个广播接收器来接收短信广播。
package com.jack.smstest; import android.os.Bundle; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.telephony.SmsMessage; import android.view.Menu; import android.widget.TextView; public class MainActivity extends Activity { private TextView sender; private TextView content; private IntentFilter receiverFilter; //过滤器 private MessageReceiver messageReceiver; //广播接收器 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sender = (TextView) findViewById(R.id.sender); content = (TextView) findViewById(R.id.content); receiverFilter = new IntentFilter(); receiverFilter.addAction("android.provider.Telephony.SMS_RECEIVED"); messageReceiver = new MessageReceiver(); registerReceiver(messageReceiver, receiverFilter); //注册广播 } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } class MessageReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); if (bundle != null) { Object[] pdus = (Object[]) bundle.get("pdus"); //提取短信消息 SmsMessage[] messages = new SmsMessage[pdus.length]; for (int i = 0; i < messages.length; i++) { messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); } String address = messages[0].getOriginatingAddress(); //获取发送方号码 String fullMessage = ""; for (SmsMessage message : messages) { fullMessage += message.getMessageBody(); //获取短信内容 } sender.setText(address); content.setText(fullMessage); } } } }
3、权限声明:在AndroidManifest.xml
中添加读取短信的权限。
<uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" />
通过以上步骤,就可以在自己的应用程序中接收并显示短信了,需要注意的是,从Android 6.0(API level 23)开始,动态权限申请是必须的,因此在实际开发中还需要处理运行时权限申请的问题。
各位小伙伴们,我刚刚为大家分享了有关“apk短信接收”的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/695575.html