如何将上下文参数发送到Android中的其他类方法?

时间:2014-11-03 00:53:20

标签: android methods call android-context

我不知道如何在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;

。 。

1 个答案:

答案 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();
        }
    }

}