如何修复上下文无法解决或不是一个字段?

时间:2016-03-29 04:54:24

标签: android

我试图在每次收到短信时尝试启用alarmManager以及我的broadcastreceiver通过另一项服务,但问题是,我在第三行收到此错误 - 上下文无法解析或不是字段。我已将所有this替换为context。我错过了什么?

private void freeze(Context context) {
    // ENABLE MyReceiver SERVICE
            ComponentName receiver = new ComponentName(IncomingSmsDetectorReceiver.context,
                    FreezerReceiver.class);
            PackageManager pm = context.getPackageManager();
            pm.setComponentEnabledSetting(receiver,
                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                    PackageManager.DONT_KILL_APP);
            // --//
            Intent intent = new Intent(context, FreezerReceiver.class);
            PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent,
                    PendingIntent.FLAG_CANCEL_CURRENT);
            AlarmManager am = (AlarmManager) context
                    .getSystemService(Context.ALARM_SERVICE);
            long recurring = (500); // tweak here
            am.setRepeating(AlarmManager.RTC, Calendar.getInstance()
                    .getTimeInMillis(), recurring, sender);
}

4 个答案:

答案 0 :(得分:1)

 ComponentName receiver = new ComponentName(IncomingSmsDetectorReceiver.context,
                    FreezerReceiver.class);

将此更改为

 ComponentName receiver = new ComponentName(getApplicationContext(),
                    FreezerReceiver.class);

getApplicationContext()会返回您所在的上下文。我希望这会有所帮助。 THANKYOU

答案 1 :(得分:0)

只需使用context代替context.context

答案 2 :(得分:0)

当您需要当前活动的上下文时,您应该使用 getApplicationContext()方法,因为它的返回类型是Context。

您还可以在参数中使用this关键字:

ComponentName receiver = new ComponentName(this,FreezerReceiver.class);

但是,只有在IncomingSmsDetectorReceiver班级写作时才适用。

答案 3 :(得分:0)

您应该将MainActivity的上下文保存到公共变量中,以便在广播中使用它。

public Context mContext;
mContext = getActivity();

修改您的代码

ComponentName receiver = new ComponentName(mContext ,
                    FreezerReceiver.class);
            PackageManager pm = context.getPackageManager();

希望它能解决您的问题。