2013-01-11 39 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本身有些问题,比如在空闲模式下睡了一段时间。 –