广播接收器和活动之间的交流 - 安卓 [英] Communication between BroadcastReceiver and Activity - android
问题描述
我在我的应用程序的广播接收器,触发每个用户得到一个来电的时间。现在,当它发生时,我所需要的广播接收机中的比活性来调用的具体方法。现在,我试图使这种方法静态,因此可用的,但东西告诉我这是一个非常糟糕的主意。
因此,我想我的实例里面活动的广播接收器没有在我的清单声明,但问题是 - 当应用程序关闭时,该活动是不存在的,所以我不能调用我的方法。
所以我的问题是 - ?我怎样才能调用此方法时,广播接收装置,解雇了,没有使它公共静态
下面是我的活动code(我已删除了部分无关)
包com.silverfix.ringo.activities;进口com.silverfix.ringo.R;
进口com.silverfix.ringo.activities.fragments.DataManagerFragment;进口android.app.ActionBar;
进口android.app.Activity;
进口android.app.FragmentTransaction;
进口android.content.BroadcastReceiver;
进口android.content.Context;
进口android.content.Intent;
进口android.content.IntentFilter;公共类RingtonesActivity延伸活动{ 私人DataManagerFragment dataManagerFragment;
私人IntentFilter的过滤器;
私人广播接收器phoneCall; @覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_ringtones);
动作条AB = getActionBar();
ab.setDisplayShowTitleEnabled(假);
ab.setDisplayHomeAsUpEnabled(真);
dataManagerFragment =新DataManagerFragment();
FragmentTransaction英尺= getFragmentManager()调用BeginTransaction()。
ft.add(dataManagerFragmentDataManagerFragment);
ft.commit();
过滤器=新的IntentFilter();
filter.addAction(android.intent.action.PHONE_STATE);
phoneCall =新的广播接收器(){ @覆盖
公共无效的onReceive(上下文的背景下,意图意图){
dataManagerFragment.act();
}
};
registerReceiver(phoneCall,过滤器);
}
}
这可能会帮助:<一href=\"http://stackoverflow.com/questions/3122564/how-can-i-notify-a-running-activity-from-a-broadcast-receiver\">how我可以从广播接收器通知运行的活动?
此外,您还可以尝试使用观察员
是这样的:
公共类BroadcastObserver扩展观测{
私人无效triggerObservers(){
setChanged();
notifyObservers();
} 公共无效的变化(){
triggerObservers();
}
}
在您的广播接收器:
@覆盖
公共无效的onReceive(上下文的背景下,意图意图){
BroadcastObserver BCO =新BroadcastObserver();
bco.change();
}
和活动:
公共类YourActivity扩展活动器具
观察{
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
BroadcastObserver BCO =新BroadcastObserver();
bco.addObserver(本);
} @覆盖
公共无效更新(){
// TODO:打电话给你想要的功能
}
}
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.
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");
ft.commit();
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);
}
}
This might help: how can I notify a running activity from a broadcast receiver?
Also, you can try using Observers
Something like:
public class BroadcastObserver extends Observable {
private void triggerObservers() {
setChanged();
notifyObservers();
}
public void change() {
triggerObservers();
}
}
In your broadcast receiver:
@Override
public void onReceive(Context context, Intent intent) {
BroadcastObserver bco = new BroadcastObserver();
bco.change();
}
and the Activity:
public class YourActivity extends Activity implements
Observer {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BroadcastObserver bco = new BroadcastObserver();
bco.addObserver(this);
}
@Override
public void update() {
//TODO: call your desired function
}
}
这篇关于广播接收器和活动之间的交流 - 安卓的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!