2012-10-08 76 views
1

我正試圖應對短信在Android中接收功能。 我讀了很多關於Stackoverflow和其他網站的相關話題,我嘗試了一個非常簡單的類,它簡單地在控制檯上打印了一條消息,並收到了消息,但我無法弄清楚它爲什麼不起作用。BroadcastReceiver onReceive未被觸發

我看到了類似的問題,在過去沒有得到答覆(見Android - Broadcast Receiver not being fired

希望有人能夠發現哪裏還有我的代碼的問題。

代碼:

package com.storassa.android.smsapp; 

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

public class SmsReceiver extends BroadcastReceiver { 

private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; 
private static final String TAG = "SMSBroadcastReceiver"; 

@Override 
public void onReceive(Context context, Intent intent) { 
System.out.println("Intent recieved: " + intent.getAction()); 

if (intent.getAction().equals(SMS_RECEIVED)) { 
Bundle bundle = intent.getExtras(); 
if (bundle != null) { 
Object[] pdus = (Object[])bundle.get("pdus"); 
final SmsMessage[] messages = new SmsMessage[pdus.length]; 
for (int i = 0; i < pdus.length; i++) { 
messages[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 
} 
if (messages.length > -1) { 
System.out.println("Message recieved: " + messages[0].getMessageBody()); 
     } 
    } 
} 
    } 
} 

和明顯

<manifest package="com.storassa.android.smsapp" 
    android:versionCode="1" 
    android:versionName="1.0" xmlns:android="http://schemas.android.com/apk/res/android"> 

    <uses-sdk android:minSdkVersion="6" android:targetSdkVersion="6"/> 
    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> 

    <application android:label="@string/app_name" android:permission="android.permission.RECEIVE_SMS"> 
     <receiver android:name="com.storassa.android.smsapp.SmsReceiver" 
      android:enabled="true" 
      android:exported="true"> 
      <intent-filter android:priority="999"> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED"></action> 
      </intent-filter> 
     </receiver> 

    </application> 
</manifest> 

回答

-1
//In on resume and on pause of actvities register the receiver and also in manifest 

    protected void onPause(){ 

     super.onPause(); 
    unregisterReceiver(SmsReceiver); 

    } 



     protected void onResume() 
{ 


      super.onResume(); 

      registerReceiver(SmsReceiver , 
       new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 

     } 


    private BroadcastReceiver SmsReceiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 

         } 


     }; 
+0

該代碼如何幫助他?這與在AndroidManifest.xml文件中註冊BroadcastReceiver相同。 並請解釋代碼,而不是隻回答一些代碼的問題。 – Darwind

1

我想你的代碼,它的工作對我罰款。

你指的是該柱具有與setPriority設置爲999,仍然廣播問題都沒有收到。

嘗試優先設置爲Integer.MAX_VALUE或者當XML應該是2147483647

一些短信應用程序將使用此Integer.MAX_VALUE的是它們的優先級,因此「吃」的所有消息。

如果它不能幫助將setPriority設置爲Integer.MAX_VALUE或2147483647,那麼請嘗試卸載處理傳入SMS的所有應用程序,並查看是否將SMS發送到您的應用程序。

如果這有幫助,那麼它是已經安裝的正在吃SMS的應用程序之一。

解決這個問題的方法是,始終將您的應用程序安裝爲第一個應用程序。通過這樣做,您將永遠是第一個接收短信廣播的應用程序。

編輯:設置優先級爲Integer.MAX_VALUE或2147483647是一個黑客,應該可能不能使用。 setPriority()方法只聲明從-1000到1000的優先級。但是我自己在應用程序中使用它,但我只處理從特定數字接收到的特定SMS,所以我沒有看到它的問題。當你還安裝了具有高優先級,那麼當前一個應用程序等應用程序,所以提高優先級就會開始工作

+0

感謝Darwind提供的建議。 我嘗試使用Integer.MAX_VALUE沒有任何結果。 我正在使用Android模擬器來檢查代碼。 現在我正在嘗試一個目標,我會讓你知道。 – sthor69

+0

嘗試一個真正的目標,它似乎不工作,在代碼不停止在我把第一個println放在斷點處。順便說一下,使用System.out.println,我應該在Eclipse的控制檯窗口上看到打印的文本嗎?我應該在手機上看到什麼嗎? – sthor69

+0

你如何發送短信到模擬器? 如果仿真器被調用類似5554:[你給出的仿真器的名稱],那麼從仿真器控件,你應該發送一條短信到5554. – Darwind

1

這是會發生的,我也有這個問題,很多時候,在一個應用程序我的首要任務是100,它沒有工作,但當我將其更改爲999時,它開始工作, 因此,嘗試設置不同的和大的優先級,然後再次檢查。

相關問題