Android 从BroadcastReceiver更新UI的最佳实践(用于接收新sms)
我有一个显示新sms和SmsReceiver(扩展广播接收器)的活动来接收传入的sms。收到短信后,更新用户界面的最佳做法是什么?如果您有自己的活动,很明显您希望在用户收到短信后显示您的活动。然后在你的接收器中,onReceive方法你可以做到这一点Android 从BroadcastReceiver更新UI的最佳实践(用于接收新sms),android,Android,我有一个显示新sms和SmsReceiver(扩展广播接收器)的活动来接收传入的sms。收到短信后,更新用户界面的最佳做法是什么?如果您有自己的活动,很明显您希望在用户收到短信后显示您的活动。然后在你的接收器中,onReceive方法你可以做到这一点 startActivity(new Intent(context,MyActivity.class)); 并将活动呈现给用户 如果你想添加额外的信息,你可以使用putExtra(“key”,“value”)(这是一种来自意图的方法) 你可以用li
startActivity(new Intent(context,MyActivity.class));
并将活动呈现给用户
如果你想添加额外的信息,你可以使用putExtra(“key”,“value”)(这是一种来自意图的方法)
你可以用like
Intent i=new Intent():
i.putExtra("key","value");
startActivity(context,i);
然后在activityoncreate方法中,您可以通过
String value = intent.getStringExtra("key");
这样,您就可以实现您的业务逻辑
编辑
当活动已在运行时,您可以使用
android:launchMode=[“多个”|“单台”|
“singleTask”|“singleInstance”]
我认为singleInstance和singleTask将只保留您活动的一个实例如果您有自己的活动,很明显您希望在用户收到短信后显示您的活动。然后在你的接收器中,onReceive方法你可以做到这一点
startActivity(new Intent(context,MyActivity.class));
并将活动呈现给用户
如果你想添加额外的信息,你可以使用putExtra(“key”,“value”)(这是一种来自意图的方法)
你可以用like
Intent i=new Intent():
i.putExtra("key","value");
startActivity(context,i);
然后在activityoncreate方法中,您可以通过
String value = intent.getStringExtra("key");
这样,您就可以实现您的业务逻辑
编辑
当活动已在运行时,您可以使用
android:launchMode=[“多个”|“单台”|
“singleTask”|“singleInstance”]
我认为singleInstance和singleTask将只保留活动的一个实例,因为您使用的是
BroadcastReceiver
,没有理由像Lukap建议的那样使用startActivity()
。只需使用接收方即可实际接收消息
当SMS到达并且您想要更新UI时,请执行以下操作:
Intent intent = new Intent(SOME_FANCY_NAME);
String msg = String.format("%d new SMS(s)!", numNewSMS);
intent.putExtra(SOME_FANCY_NAME_EXTRA, msg);
sendBroadcast(intent);
然后,在您的活动中:
class MyMessageReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(SOME_FANCY_NAME)) {
// Here goes your UI-updates
String msg = intent.getStringExtra(SOME_FANCY_NAME_EXTRA);
Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
}
}
}
由于您使用的是
BroadcastReceiver
,因此没有理由像Lukap建议的那样使用startActivity()
。只需使用接收方即可实际接收消息
当SMS到达并且您想要更新UI时,请执行以下操作:
Intent intent = new Intent(SOME_FANCY_NAME);
String msg = String.format("%d new SMS(s)!", numNewSMS);
intent.putExtra(SOME_FANCY_NAME_EXTRA, msg);
sendBroadcast(intent);
然后,在您的活动中:
class MyMessageReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(SOME_FANCY_NAME)) {
// Here goes your UI-updates
String msg = intent.getStringExtra(SOME_FANCY_NAME_EXTRA);
Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
}
}
}
如果我的活动当前正在运行,这是否会启动另一个活动?在您的清单中,您可以添加singleTask,从而解决这种情况,请参阅我的EditsHankYou,我在您的帮助和位代码intent.setFlags(intent.FLAG\u activity\u NEW\u TASK)的帮助下使其正常工作;如果我的活动当前正在运行,这是否会启动另一个活动?在您的清单中,您可以添加singleTask,从而解决这种情况,请参阅我的EditsHankYou,我在您的帮助和位代码intent.setFlags(intent.FLAG\u activity\u NEW\u TASK)的帮助下使其正常工作;这不是更新UI,而是仅显示祝酒词。我猜他想更新ListActivity的用户界面。请在对答案进行向下投票之前学习如何阅读,并停止推断不存在的数据。OP在他的第一条评论中写道“显示新短信”。敬酒的目的正是OP想要的。没有更多,也没有更少。这不是更新UI,而是仅显示祝酒词。我猜他想更新ListActivity的用户界面。请在对答案进行向下投票之前学习如何阅读,并停止推断不存在的数据。OP在他的第一条评论中写道“显示新短信”。敬酒的目的正是OP想要的。不多也不少。