BroadcastReceiver 和 Activity 之间的通信

编程入门 行业动态 更新时间:2024-10-10 15:27:28
本文介绍了BroadcastReceiver 和 Activity 之间的通信 - android的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我的应用程序中有一个广播接收器,每次用户接到来电时都会触发它.现在,当它发生时,我需要广播接收器在特定活动中调用特定方法.现在,我尝试将这个方法设为静态并因此可用,但有些事情告诉我这是一个非常糟糕的主意.

I have a broadcast receiver in my app which is fired every time the user gets an incoming call. Now, when it happens, I need the broadcast receiver to invoke a specific method in a specific activity. Now, I tried to make this method static and therefore available, but something tells me it is a very bad idea.

因此,我尝试在我的 Activity 中实例化广播接收器,而不在我的清单中声明它,但问题是 - 当应用程序关闭时,该 Activity 不存在,因此我无法调用我的方法.

Accordingly, I tried to instantiate the broadcast receiver inside my activity without declaring it in my manifest but the problem is - when the app is off, the activity is not exist and therefore I can't invoke my method.

所以我的问题是 - 如何在广播接收器启动时调用此方法,而不使其成为公共静态"?

So my question is - How can I invoke this method when the broadcast receiver is fired up, without making it "public static"?

这是我的活动代码(我已经删除了不相关的部分)

Here is my activity code(I have deleted the irrelevant parts)

package com.silverfix.ringo.activities; import com.silverfix.ringo.R; import com.silverfix.ringo.activities.fragments.DataManagerFragment; import android.app.ActionBar; import android.app.Activity; import android.app.FragmentTransaction; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; public class RingtonesActivity extends Activity{ private DataManagerFragment dataManagerFragment; private IntentFilter filter; private BroadcastReceiver phoneCall; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_ringtones); ActionBar ab = getActionBar(); ab.setDisplayShowTitleEnabled(false); ab.setDisplayHomeAsUpEnabled(true); dataManagerFragment = new DataManagerFragment(); FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.add(dataManagerFragment, "DataManagerFragment"); ftmit(); filter = new IntentFilter(); filter.addAction("android.intent.action.PHONE_STATE"); phoneCall = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { dataManagerFragment.act(); } }; registerReceiver(phoneCall, filter); } }

推荐答案

你可以使用观察者,比如

You can use observers , like

public class MyReceiver extends BroadcastReceiver { public MyReceiver() { } @Override public void onReceive(Context context, Intent intent) { ObservableObject.getInstance().updateValue(intent); } }

public class MainActivity extends Activity implements Observer { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ObservableObject.getInstance().addObserver(this); } @Override public void update(Observable observable, Object data) { Toast.makeText(this, String.valueOf("activity observer " + data), Toast.LENGTH_SHORT).show(); } }

public class ObservableObject extends Observable { private static ObservableObject instance = new ObservableObject(); public static ObservableObject getInstance() { return instance; } private ObservableObject() { } public void updateValue(Object data) { synchronized (this) { setChanged(); notifyObservers(data); } } }

接收器可以通过清单使用.ObservableObject - 必须是单例.

Receiver can be used via manifest. ObservableObject - must be singleton.

更多推荐

BroadcastReceiver 和 Activity 之间的通信

本文发布于:2023-11-27 11:00:35,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1637796.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:通信   BroadcastReceiver   Activity

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!