2013-12-14 61 views
2

我正在发送和接收短信的应用程序。发送是好的,但在接收短信应用程序运行时,接收也可以,但是当我关闭应用程序时,我的BroadcastReceiver的onReceive方法没有执行,实际上我正在使用android 4,并且我从大学那里听说它可能会达到Android的版本,这意味着Android 4不会让应用程序收到短信时,他们没有显示给用户。这样对吗 ?通过BroadcastReceiver的短信接收器

这里是正常的代码(我是这么认为的)

public class SMSReceiver extends BroadcastReceiver { 

private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; 
private static final String ACTIVITY_SERVICE = "activity"; 

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

这里是明显的相关内容

<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.SEND_SMS" /> 
<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.RECEIVE_SMS" /> 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="15" /> 

    <receiver 
     android:name="com.ssol.SMSReceiver" 
     android:permission="android.permission.BROADCAST_SMS" > 
     <intent-filter android:priority="2147483647" > 
      <action android:name="android.intent.action.PHONE_STATE" /> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" />    
     </intent-filter> 
    </receiver> 
+0

发布清单 – user2511882

+0

尝试增加'<使用许可权的android:NAME = “android.permission.READ_SMS”/>'也 – JiTHiN

+0

你是如何 “关闭程序”? “我从一所大学那里听说,它可能会达到android的版本,这意味着android 4不会让应用程序在他们没有向用户展示时收到短信,这是对的吗?” - Android 4.4强加了一些限制,但没有什么会影响你在做什么:http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html – CommonsWare

回答

1

可以接收短信和信息。

我一直在使用接受它:

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.SmsMessage; 
import android.widget.Toast; 

public class SMSReceiver extends BroadcastReceiver 
{ 
    public void onReceive(Context context, Intent intent) 
    { 

     Bundle myBundle = intent.getExtras(); 
     SmsMessage [] messages = null; 
     String strMessage = ""; 

     if (myBundle != null) 
     { 
     //get message in pdus format(protocol discription unit) 
      Object [] pdus = (Object[]) myBundle.get("pdus"); 
      //create an array of messages 
      messages = new SmsMessage[pdus.length]; 

      for (int i = 0; i < messages.length; i++) 
      { 
      //Create an SmsMessage from a raw PDU. 
       messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
       //get the originating address (sender) of this SMS message in String form or null if unavailable 
       strMessage += "SMS From: " + messages[i].getOriginatingAddress(); 
       strMessage += " : "; 
       //get the message body as a String, if it exists and is text based. 
       strMessage += messages[i].getMessageBody(); 
       strMessage += "\n"; 
      } 
      //show message in a Toast 
      Toast.makeText(context, strMessage, Toast.LENGTH_SHORT).show(); 
     } 
    } 
} 

更多的帮助,您可以看到关于这个短信后发送和receiving

+0

其实这个问题不是关于如何阅读短信,问题是关闭应用程序后SMMes没有被我的SMSReceiver捕捉? – Areff

0

尝试使用此代码:

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.SmsMessage; 

public class ReadSMS extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle myBundle = intent.getExtras(); 
     SmsMessage[] messages = null; 

     if (myBundle != null) { 
      Object[] pdus = (Object[]) myBundle.get("pdus"); 
      messages = new SmsMessage[pdus.length]; 
      String SMS = ""; 

      for (int i = 0; i < messages.length; i++) { 
       messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
       SMS = messages[i].getMessageBody();4 
       //SMS is the text content 
      } 
     } 
    } 
} 

为我工作:)

+0

其实这个问题不是关于如何阅读短信,问题是为什么关闭应用后SMM不能通过我的SMSReceiver捕捉? – Areff

1

试着改变你的接收器在你的清单以这种

<receiver 
     android:name="com.ssol.SMSReceiver android:exported="true"" 
     android:permission="android.permission.BROADCAST_SMS" > 
     <intent-filter android:priority="1000" > 
      <action android:name="android.intent.action.PHONE_STATE" /> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED" />    
     </intent-filter> 
    </receiver> 

安卓出口指示SmsReceiver类必须不仅从应用程序接收事件,而且从整个Android系统接收事件。

android:priority表示您的短信接收的优先级。 1000是默认值,似乎是使用的最佳值。

希望这有助于:)

+0

将意图过滤器添加到“BroadcastReceiver”后,'android:exported'默认为'true'。 – Ole