据我所知,这应该可行。除非它没有:-/
这个想法是扩展我使用的所有 Activity 类,以包含一个 BroadcastReceiver,它在我发送 Toast 消息时会弹出它们。这种策略的最终结果是异步工作者作业可以“自己发现”这是“最高级”的形式(如果可用),然后通过 toast 向用户发布消息,尽管当我不选择时它是异步事件的一部分(*)将上下文作为参数传递。
问题:当我调用 doDemo() 时,会发生火灾事件(我
log.d
从 doDemo() 获取)但接收事件永远不会触发。
(*)这是必不可少的,这是整个目的
public class ToastActivity extends Activity{
private BroadcastReceiver ToastBroadCastReceiver = new BroadcastReceiver() {
@Override
public void onReceive( Context context, Intent intent ) {
Toast.makeText(getApplicationContext(), intent.getAction() + " package: "+ intent.getPackage(), Toast.LENGTH_SHORT).show();
Log.d("ToastBroadCastReceiver", "Broadcastreceiver: " + intent.getAction() + " package: "+ intent.getPackage() + " @" + System.currentTimeMillis());
}
};
public void onResume() {
super.onResume();
registerReceiver(ToastBroadCastReceiver, new IntentFilter("com.my.domain.BROADCAST"));
}
public void onPause() {
super.onPause();
unregisterReceiver(ToastBroadCastReceiver);
}
public void doDemo(){
Log.d("ToastBroadCastReceiver", "doDemo Broadcast started" );
Intent broadCastIntent = new Intent();
broadCastIntent.setAction( "com.my.domain.BROADCAST");
broadCastIntent.setPackage( "well hello test!" );
sendBroadcast(broadCastIntent);
Log.d("ToastBroadCastReceiver", "doDemo Broadcast sent" );
}
}
编辑
经过与阿里的长时间交谈,这就是我们想出的
public class ToastActivity extends Activity{
private BroadcastReceiver ToastBroadCastReceiver = new BroadcastReceiver() {
@Override
public void onReceive( Context context, Intent intent ) {
if (intent.getAction().equals("TOASTMESSAGE")) {
String message = "";
Bundle extras = intent.getExtras();
if (extras != null) {
message = extras.getString("message");
}
Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show();
Log.d("ToastBroadCastReceiver", "Broadcastreceiver: " + message + "|" + intent.getAction());
}
}
};
public void ToastRegister(){
registerReceiver(ToastBroadCastReceiver, new IntentFilter("TOASTMESSAGE"));
}
public void ToastDeRegister(){
try {
unregisterReceiver(ToastBroadCastReceiver);
}
catch (Exception e) {
Log.e("ToastBroadCastReceiver", e.getMessage());
}
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ToastRegister();
}
public void onResume() {
super.onResume();
ToastRegister();
}
public void onPause() {
super.onPause();
ToastDeRegister();
}
public void onDestroy() {
super.onDestroy();
ToastDeRegister();
}
public void doDemo(){
Log.d("ToastBroadCastReceiver", "doDemo Broadcast started" );
Intent broadCastIntent = new Intent();
broadCastIntent.setAction("TOASTMESSAGE");
broadCastIntent.putExtra("message","hello test message!");
sendBroadcast(broadCastIntent);
Log.d("ToastBroadCastReceiver", "doDemo Broadcast sent" );
}
}