android 广播观察者,BroadcastReceiver和Activity之间的通信 – android
我的應(yīng)用程序中有一個廣播接收器,每次用戶接到來電時都會被觸發(fā).現(xiàn)在,當它發(fā)生時,我需要廣播接收器來調(diào)用特定活動中的特定方法.現(xiàn)在,我嘗試將此方法設(shè)置為靜態(tài),因此可用,但有些東西告訴我這是一個非常糟糕的主意.
因此,我嘗試在我的活動中實例化廣播接收器而不在我的清單中聲明它但問題是 – 當應(yīng)用程序關(guān)閉時,活動不存在,因此我無法調(diào)用我的方法.
所以我的問題是 – 當廣播接收器被激發(fā)時,如何在不使其成為“公共靜態(tài)”的情況下調(diào)用此方法?
這是我的活動代碼(我刪除了不相關(guān)的部分)
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);
}
}
}
接收器可以通過清單使用.
ObservableObject – 必須是單例.
標簽:invoke,android,methods,android-activity,broadcastreceiver
來源: https://codeday.me/bug/20190923/1815245.html
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的android 广播观察者,BroadcastReceiver和Activity之间的通信 – android的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android四大组件五大存储六大布局,
- 下一篇: 小米2+android版本,小米2S能刷