Android 更新活动/在活动打开时接收广播时触发事件
我制作了一个广播接收器,当从服务器接收到消息时会发出通知。 当我点击通知时,它会打开预期的活动,并更新消息列表 我的问题是,在活动打开时收到广播时,如何更新消息列表(触发事件)?(就像他们在“WhatsApp”中所做的那样,他们在聊天时不发送通知,而是更新消息列表) 我的广播接收器如下:Android 更新活动/在活动打开时接收广播时触发事件,android,android-notifications,Android,Android Notifications,我制作了一个广播接收器,当从服务器接收到消息时会发出通知。 当我点击通知时,它会打开预期的活动,并更新消息列表 我的问题是,在活动打开时收到广播时,如何更新消息列表(触发事件)?(就像他们在“WhatsApp”中所做的那样,他们在聊天时不发送通知,而是更新消息列表) 我的广播接收器如下: public class NotifReceiver extends BroadcastReceiver { private Context context; private String no
public class NotifReceiver extends BroadcastReceiver {
private Context context;
private String notifTitle,notifStatus;
public static int NOTIF_ID = 54321;
@Override
public void onReceive(Context context, Intent intent) {
this.context = context;
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
context.startService(new Intent(context, NotifService.class));
Log.i("Aditya", "Background Service of SamajApp Started");
}
if(intent.getAction().equals("Aditya.Notification")){
showNotif();
}
}
public void showNotif(){
NotificationManager notifManager = NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
Intent i = new Intent(context, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pIntent = PendingIntent.getActivity(context, 0, i, 0);
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notif = new NotificationCompat.Builder(context);
notif.setContentTitle("SamajApp");
notif.setContentText(notifTitle);
notif.setSmallIcon(R.drawable.logo);
notif.setSound(soundUri);
notif.setContentIntent(pIntent);
notifManager.notify(NOTIF_ID, notif.build());
}
}
public class MainActivity extends Activity {
private ListView mListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.listViewHome);
updateList();
}
//MsgListAdapter is my custom Adapter to populate Listview,
private void updateList(){
registerForContextMenu(mListView);
Vector<HashMap<String, String>> list = getMsgListfromDB(); //gets message list from database
Vector<HashMap<String, byte[]>> blobList = getBlobListfromDB(); //gets blob list from db.
ad = new MsgListAdapter(getApplicationContext(), list,blobList,R.layout.listrow,
new String[] { "MsgCat", "MsgDt_Simp","by","FlagUnread"},
new int[] {R.id.textViewCat, R.id.textViewDateTime,R.id.textViewBy},
new int[] {R.id.imageViewMsgImg,R.id.imageViewCatImg},R.id.imageViewUnreaddr);
mListView.setAdapter(ad);
}
}
我已经在舱单上登记了它,它工作得很好
我的主要活动如下:
public class NotifReceiver extends BroadcastReceiver {
private Context context;
private String notifTitle,notifStatus;
public static int NOTIF_ID = 54321;
@Override
public void onReceive(Context context, Intent intent) {
this.context = context;
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) {
context.startService(new Intent(context, NotifService.class));
Log.i("Aditya", "Background Service of SamajApp Started");
}
if(intent.getAction().equals("Aditya.Notification")){
showNotif();
}
}
public void showNotif(){
NotificationManager notifManager = NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
Intent i = new Intent(context, MainActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pIntent = PendingIntent.getActivity(context, 0, i, 0);
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notif = new NotificationCompat.Builder(context);
notif.setContentTitle("SamajApp");
notif.setContentText(notifTitle);
notif.setSmallIcon(R.drawable.logo);
notif.setSound(soundUri);
notif.setContentIntent(pIntent);
notifManager.notify(NOTIF_ID, notif.build());
}
}
public class MainActivity extends Activity {
private ListView mListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.listViewHome);
updateList();
}
//MsgListAdapter is my custom Adapter to populate Listview,
private void updateList(){
registerForContextMenu(mListView);
Vector<HashMap<String, String>> list = getMsgListfromDB(); //gets message list from database
Vector<HashMap<String, byte[]>> blobList = getBlobListfromDB(); //gets blob list from db.
ad = new MsgListAdapter(getApplicationContext(), list,blobList,R.layout.listrow,
new String[] { "MsgCat", "MsgDt_Simp","by","FlagUnread"},
new int[] {R.id.textViewCat, R.id.textViewDateTime,R.id.textViewBy},
new int[] {R.id.imageViewMsgImg,R.id.imageViewCatImg},R.id.imageViewUnreaddr);
mListView.setAdapter(ad);
}
}
公共类MainActivity扩展活动{
私有列表视图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView=(ListView)findViewById(R.id.listViewHome);
updateList();
}
//MsgListAdapter是我用来填充Listview的自定义适配器,
私有void updateList(){
registerForContextMenu(mListView);
Vector list=getMsgListfromDB();//从数据库获取消息列表
Vector blobList=getBlobListfromDB();//从db获取blob列表。
ad=新的MsgListAdapter(getApplicationContext(),list,blobList,R.layout.listrow,
新字符串[]{“MsgCat”、“MsgDt_Simp”、“by”、“flaguread”},
新int[]{R.id.textViewCat,R.id.textViewDateTime,R.id.textViewBy},
新的int[]{R.id.imageViewMsgImg,R.id.imageViewCatImg},R.id.imageviewunaddr);
mListView.setAdapter(ad);
}
}
任何有关这方面的帮助都将不胜感激。
谢谢。两种方式
在我看来,第二种方法更容易使用。你能像第一种方法一样描述第二种方法吗?在这里,你添加了一个示例,检查一下,如果需要更多帮助,请告诉我。你刚刚在MainActivity中对BroadCastreceiver类进行了子类化,以便它可以与UI进行调整。它肯定会工作,但在我的情况下,我做了一个单独的类扩展广播接收器。我如何在MainActivity的UI中进行更改。好的,谢谢你的回答。两种方式,要么有两个接收者,要么有多个接收者,一个活动被另一个覆盖。