java - 在java类和服务中获取上下文
问题描述
我有一个检查位置的应用程序。为了获取位置和更多数据,我使用了 java 类调用UpdateTimesActivity
(它不是一个活动)
现在,我想每 7 小时检查一次位置,并根据它更新数据,所以我有一项服务可以做到这一点。问题是,打电话时UpdateTimesActivity
,我得到:
Attempt to invoke virtual method 'android.content.pm.PackageManager android.content.Context.getPackageManager()' on a null object reference
这是我的服务:
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, " MyService Started", Toast.LENGTH_LONG).show();
ArrayList<Date> times = (ArrayList<Date>) intent.getExtras().get("requiredTimesToNotify");
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
new UpdateTimesActivity(getApplicationContext(), locationManager);
BroadcastReceiver resultTimeRevicer = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
DecimalFormat df = new DecimalFormat("00");
ArrayList<Calendar> resultTimes= (ArrayList<Calendar>) intent.getExtras().get("a");
if(resultTimes.size()>0){
Toast.makeText(context, resultTimes.size()+" " , Toast.LENGTH_LONG).show();
}
}
};
registerReceiver(resultTimeRevicer, new IntentFilter("times_gabi"));
return START_STICKY;
}
这是问题的一部分:
public UpdateTimesActivity(final Context context, LocationManager locationManager) {
this.context = context;
this.locationManager = locationManager;
if (ActivityCompat.checkSelfPermission(context,
Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
ActivityCompat.checkSelfPermission(context,
Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.INTERNET}
, 10);
}
return;
}
locationManager.requestLocationUpdates("gps", 5000, 0, locationListener);
}
现在,我确实看到了解释你不能发送上下文抛出服务的答案,但即使我尝试做类似的事情(当我直接从 MainActivity 调用它时它确实有效)
MainActivity m = new MainActivity();
context = m.context (static);
并将其放在 requestPermissions 中它将不起作用。
谢谢...
解决方案
推荐阅读
- c# - 如何将我的代码切换到 UnityWebRequest 以便下载进度有效?
- c# - 在 C#.Net -WhenAll Async 中重试失败的任务
- ruby-on-rails - 在特定嵌套属性的情况下如何排除验证?
- sql - 获取字段层次结构
- python - 单击 HTML 按钮时如何运行脚本(Python、Bottle)
- c# - 如何访问 blazor webassembly 中的应用程序设置
- javascript - Action Creator 在 Redux 中火力不同,如何处理?
- r - tableGrob:使用 annotation_custom 调整在 ggplot 上绘制的表格的大小(更改字体大小)
- c# - 检测对话何时结束,以便我可以删除存储的对话状态数据
- mysql - 我应该如何在 mysql 中批量查询只追加的表?