首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BroadcastReceiver未正确启动活动

BroadcastReceiver未正确启动活动
EN

Stack Overflow用户
提问于 2013-01-15 01:29:41
回答 1查看 546关注 0票数 0

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

代码语言:javascript
复制
<activity
    android:name=".MainActivity"
    android:launchMode="singleTask">
</activity>

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

代码语言:javascript
复制
public void onCreate(Bundle savedInstanceState) {
    // ...
    handleNewMessage(this.getIntent());
}

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

在sms BroadcastReceiver中,我使用FLAG_ACTIVITY_NEW_TASK标志开始此活动,如下所示:

代码语言:javascript
复制
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秒,收到短信后自动解锁手机,但我不知道怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-30 21:52:36

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

代码语言:javascript
复制
@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();
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14323498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档