2013-12-14 100 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