我试图在每次收到短信时尝试启用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);
}
答案 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();
希望它能解决您的问题。