BroadcastReceiver无法正确启动Activity

时间:2013-01-14 17:29:41

标签: android android-activity broadcastreceiver

我写了一个与发送和接收短信有关的应用程序。实际上,它会向设备发送一些命令,并从该设备获取答案以向用户显示。 我将此应用的主要活动定义如下:

<activity
    android:name=".MainActivity"
    android:launchMode="singleTask">
</activity>

它被定义为singleTask,以避免同时运行多个实例。 在MainActivity中,我添加了onNewIntent()方法,以便在前台运行时获取对此Activity的新调用:

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

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

在sms BroadcastReceiver内部,我使用FLAG_ACTIVITY_NEW_TASK标志启动此活动,如下所示:

Intent intent = new Intent();
intent.putExtra("MESSAGE_BODY", sms.getBody());
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setClass(context, MainActivity.class);
context.startActivity(intent);

问题在于

1-有时我会收到3-4条短信,但MainActivity无法启动。如果我接到电话或解锁手机,所有消息都会同时启动应用程序(MainActivity)!

2-我想打开屏幕2-3秒并在收到短信后自动解锁手机,但我不知道怎么办?

1 个答案:

答案 0 :(得分:0)

解决方案是使用WakeLock,如下所示“

@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();
}