我写了一个与发送和接收短信有关的应用程序。实际上,它会向设备发送一些命令,并从该设备获取答案以向用户显示。 我将此应用的主要活动定义如下:
<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秒并在收到短信后自动解锁手机,但我不知道怎么办?
答案 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();
}