首页 > 解决方案 > 在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 中它将不起作用。

谢谢...

标签: javaandroid

解决方案


推荐阅读