Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从BroadcastReceiver更新UI的最佳实践(用于接收新sms)_Android - Fatal编程技术网

Android 从BroadcastReceiver更新UI的最佳实践(用于接收新sms)

Android 从BroadcastReceiver更新UI的最佳实践(用于接收新sms),android,Android,我有一个显示新sms和SmsReceiver(扩展广播接收器)的活动来接收传入的sms。收到短信后,更新用户界面的最佳做法是什么?如果您有自己的活动,很明显您希望在用户收到短信后显示您的活动。然后在你的接收器中,onReceive方法你可以做到这一点 startActivity(new Intent(context,MyActivity.class)); 并将活动呈现给用户 如果你想添加额外的信息,你可以使用putExtra(“key”,“value”)(这是一种来自意图的方法) 你可以用li

我有一个显示新sms和SmsReceiver(扩展广播接收器)的活动来接收传入的sms。收到短信后,更新用户界面的最佳做法是什么?

如果您有自己的活动,很明显您希望在用户收到短信后显示您的活动。然后在你的接收器中,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将只保留您活动的一个实例

如果您有自己的活动,很明显您希望在用户收到短信后显示您的活动。然后在你的接收器中,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想要的。不多也不少。