我不知道如何在Android BroadcastReceiver
的其他类中使用context参数调用方法?
以下是我的代码,Utils.resetTvProviderDB(this)
中的TvSettingReceiver.java
无法调用Utils.java。
TvSettingReceiver.java
public class TvSettingReceiver extends BroadcastReceiver {
public static final String ACTION_SETTING_CHANGED =
"com.lge.tvsettings.ACTION_SETTING_CHANGED";
public static final String KEY_SETTING_CHANGED_TYPE =
"setting_changed_type";
public static final int TYPE_DISPLAY_MODE = 1;
public static final int TYPE_CLOSED_CAPTION = 2;
public static final int TYPE_LANGUAGE = 3;
public static final int TYPE_DVB = 4;
public static enum CurrentDVB {DVBT, DVBC};
public static CurrentDVB currentDVB;
public TvSettingReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
// TODO: This method is called when the BroadcastReceiver is receiving
// an Intent broadcast.
String intentAction = intent.getAction();
if(intentAction.compareTo(ACTION_SETTING_CHANGED)==0){
handleTvSettingChanged(context, intent);
}
else if(intentAction.compareTo(Intent.ACTION_LOCALE_CHANGED)==0){
handleLocaleChanged(context, intent);
}
}
。 。
private void deleteAllChannelDB(CurrentDVB newDVB) {
if (currentDVB != newDVB) {
Utils.needToResetDtvDB = true;
/* reset Dvbt Channels Objects */
DVBTInputService.resetDvbtChannelsObjectsList();
/* remove tv provider all dbs */
try {
Utils.resetTvProviderDB(this); // It's impossible
} catch (Exception e) {
e.printStackTrace();
}
}
}
Utils.java
class Utils {
public static void resetTvProviderDB(Context context) throws Exception {
Uri channelUri = TvContract.buildChannelsUriForInput(
"com.lge.tvinput/.DVBTInputService", false);
if (DEBUG)
Log.d(TAG, " resetTvProviderDBforDvbt uri " + channelUri);
String[] projection = { TvContract.Channels._ID };
Cursor cursor = null; // , cursor2 = null;
。 。
答案 0 :(得分:1)
您可以获取Context
方法中传递给您的onReceive()
的引用,并将其保存在实例变量中。完成后,您可以将其传递给resetTvProviderDB()
。所以,代码看起来像这样:
private Context mContext;
public void onReceive(Context context, Intent intent) {
...
mContext = context;
...
}
...
private void deleteAllChannelDB(CurrentDVB newDVB) {
if (currentDVB != newDVB) {
...
try {
Utils.resetTvProviderDB(mContext); // <- This is possible
} catch (Exception e) {
e.printStackTrace();
}
}
}