2013-01-11 75 views
0

我有一個接收短信(通過BroadCastReceiver)並開始處理傳入短信的活動(包括播放聲音以通知用戶,更新數據庫並向用戶顯示消息)。在手機睡着時獲取短信

問題是,有時候,該應用程序沒有運行,手機在睡夢中,我什麼都沒收到,但只要我解鎖屏幕,我就收到了4條或5條消息!

編輯:廣播接收器的 定義:從廣播接收器

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
      // ... 
      handleNewMessage(this.getIntent()); 
    } 


@Override 
public void onNewIntent (Intent intent) { 
    super.onNewIntent(intent); 
    handleNewMessage(intent);  
} 

開始MyActivity:

<activity 
     android:name=".MyActivity" 
     android:launchMode="singleInstance"> 
    </activity> 

內活動:我的活動

<receiver 
     android:name=".util.sms.SmsReceiver" 
     android:enabled="true" > 
     <intent-filter android:priority="999" > 
      <action android:name="android.intent.action.DATA_SMS_RECEIVED" /> 
      <data android:scheme="sms" /> 
      <data android:port="56790" /> 
     </intent-filter> 
    </receiver> 

定義

@Override 
public void onReceive(Context context, Intent intent) { 
     //... 
     if(smsIsMine()) { 
    Intent intent = new Intent(); 
    intent.putExtra("MESSAGE_BODY", sms.getBody()); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    intent.setClass(context, MyActivity.class); 
    context.startActivity(intent);     
     } 
    } 

任何想法?

回答

0

解決方案是使用激活鎖定爲下面的」

@Override 
public void onReceive(Context context, Intent intent) { 
    PowerManager powerManager = (PowerManager)        context.getSystemService(Context.POWER_SERVICE); 
    PowerManager.WakeLock wl = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, ""); 
    wl.acquire(); 
    // your code ... 
    wl.release(); 
} 
1

將您的接收器註冊到清單中。是這樣的:

<receiver android:name="com.app.SMSReceiver" android:enabled="true"> 
     <intent-filter android:priority="999"> 
      <action android:name="android.provider.Telephony.SMS_RECEIVED"/> 
     </intent-filter> 
    </receiver> 
+0

我這樣做,我測試請你給我更多的細節,這將如何解決這個問題 –

+0

我需要什麼?我假設你是從一個活動中註冊你的接收者,當你這樣做時,廣播接收者在活動關閉或進入onPause狀態時立即取消註冊,當你在清單中註冊時,不管的應用程序狀態(打開,關閉,在後臺)廣播接收器收到意圖並執行BroadcastReceiver的onReceive()。 – drulabs

+0

我在清單中註冊接收器(就像你),幾乎所有的時間都可以。但有時候我會解釋一些事情,我認爲Android本身有些問題,比如在空閒模式下睡了一段時間。 –