【发布时间】:2015-03-20 22:18:21
【问题描述】:
我的应用中有一个广播接收器,每次用户接到来电时都会触发它。现在,当它发生时,我需要广播接收器在特定活动中调用特定方法。现在,我尝试将这个方法设为静态并因此可用,但有人告诉我这是一个非常糟糕的主意。
因此,我尝试在我的活动中实例化广播接收器而不在我的清单中声明它,但问题是 - 当应用程序关闭时,活动不存在,因此我无法调用我的方法。
所以我的问题是 - 如何在广播接收器启动时调用此方法,而不将其设为“公共静态”?
这是我的活动代码(我已经删除了不相关的部分)
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);
}
}
【问题讨论】:
-
当您接到电话时,您的应用程序将转为后台。那么您将如何处理活动(当您的应用程序在后台时)??
-
该方法是否必须在
Activity类中? -
那个方法会做什么??
-
你必须使用pendingIntent来通知。
-
在注册广播的同一个片段中声明方法或创建一个帮助类在此中移动方法。通过创建此类的对象。你将能够做到这一点。
标签: android android-activity methods broadcastreceiver invoke