android - 在后台收听传入的文本

标签 android sms broadcastreceiver

我正在尝试让我的应用程序以持久的方式监听传入的短信。最好的方法是什么?

目前,我已经有了一个可用的 BroadcastReceiver,并且正在为我的应用程序实现本地服务。以某种方式将 BroadcastReceiver 实现到服务中是否是执行此操作的正确方法?该服务会在内存不足的情况下工作吗?

最佳答案

是的,广播接收器是收听传入短信的最佳方式。如果收到传入短信,请使用 IntentService 来完成您的工作,您想对收到的短信执行什么操作。您可以将传入短信的接收器注册为:

list 文件

<receiver class="SMSApp">  
   <intent-filter>  
      <action android:value="android.provider.Telephony.SMS_RECEIVED" />  
     </intent-filter>  
</receiver>  
<uses-permission android:name="android.permission.RECEIVE_SMS" />

Java 文件

    public class SMSApp extends BroadcastReceiver{
    private static final String LOG_TAG = "SMSApp"; 
    /* package */
    static final String ACTION = "android.provider.Telephony.SMS_RECEIVED"; 
    public void onReceive(Context context, Intent intent){ 
        if (intent.getAction().equals(ACTION)){ 
          Bundle bundle = intent.getExtras();
          if (bundle != null){
               Object[] pdus = (Object[]) bundle.get("pdus");
               SmsMessage[] messages = new SmsMessage[pdus.length];
               for (int i = 0; i < pdus.length; i++){
                 messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
               }
               for (SmsMessage message : messages){
                    String strFrom = message.getDisplayOriginatingAddress();
                    String strMsg = message.getDisplayMessageBody();
               }
            }    
        } 
    } 
}    

第二种方式您可以注册 ContentObserver for content://sms/inbox 用于监听收件箱中传入的短信

关于android - 在后台收听传入的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10354025/

相关文章:

javascript - 如何使用 Twilio 和 Node 设置 HTTP cookie?

linux - 将 Linux 重新同步到 NTP 服务器

android - 尝试从特定发件人处获取短信

Android - 如何检测 Action 媒体按钮长按

android - 为什么没有 BroadcastReceiver 的测试仪器?

android - 当 Lollipop 版本的应用程序关闭时,电话状态的 BroadCastReceiver 不起作用

android - 当文本较大且正在滚动时,不显示 TextView Shape 背景

java - 在类的方法中初始化后,类的字段为空

android - RecyclerView onMeasure 性能问题

android - 我可以在选择器中添加图层列表吗