gpt4 book ai didi

android - BroadcastReceiver 和 Activity 之间的通信 - android

转载 作者:IT老高 更新时间:2023-10-28 23:02:44 28 4
gpt4 key购买 nike

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

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

所以我的问题是 - 如何在广播接收器启动时调用此方法,而不将其设为“公共(public)静态”?

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

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);
}
}

最佳答案

你可以使用观察者,比如

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);
}
}
}

接收器可以通过 list 使用。ObservableObject - 必须是单例的。

关于android - BroadcastReceiver 和 Activity 之间的通信 - android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28083430/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com