ReceiverRestrictedContext не может быть приведен к android.app. Активность для службы определения местоположения - PullRequest
0 голосов
/ 29 августа 2018

Я работаю на Приемнике, где я хочу получить Последнее известное местоположение, во время выполнения оно выдает мне ошибку: ReceiverRestrictedContext cannot be cast to android.app.Activity Ниже приведен мой класс приемника, включая мой фрагмент Manifest. Я просто хочу получить мое последнее известное местоположение в классе моего приемника. Я искал подобный вопрос здесь, но у меня не получилось.

Спасибо

public class AlarmReceiver extends BroadcastReceiver {

    int hour=6;
    int minutes=19;
    Context contextGlobal;
    private FusedLocationProviderClient mFusedLocationClient;

    @Override
    public void onReceive(final Context context, Intent intent) {

        Calendar rightNow = Calendar.getInstance();
        hour    = rightNow.get(Calendar.HOUR_OF_DAY);
        minutes = rightNow.get(Calendar.MINUTE);
        contextGlobal = context;

        final ParseUser pUser = ParseUser.getCurrentUser();

        if(pUser!=null){
            try {
                mFusedLocationClient = LocationServices.getFusedLocationProviderClient(context);
                mFusedLocationClient.getLastLocation().addOnSuccessListener((Activity)context, new OnSuccessListener<Location>() {
                    @Override
                    public void onSuccess(Location location) {
                        if (location != null) {
                            Vibrator v = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
                            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                                v.vibrate(VibrationEffect.createOneShot(500,VibrationEffect.DEFAULT_AMPLITUDE));
                            }else{
                                v.vibrate(500);
                            }


                        }
                        Toast.makeText(context,location.getLatitude()+"",Toast.LENGTH_LONG).show();

                    }
                });

            }catch (SecurityException sexp){
                sexp.getMessage();
            }

        }
    }
}

1 Ответ

0 голосов
/ 29 августа 2018

Вы можете использовать FusedLocationProviderClient только в Активности.

Каждый контекст не должен быть контекстом Деятельности.

Как и getContext() внутри Диалога / Фрагмента, можно привести его к родительской Деятельности. Но контекст Broadcast Reveiver нельзя преобразовать в контекст Activity.

Взлом

  • Создайте пустое действие макета, запустите это действие с BroadcastReceiver и введите свой код местоположения внутри этого действия.

Или вы можете использовать Службу, вы начнете эту службу определения местоположения с BroadcastReveiver, вот хороший пример службы определения местоположения.

Дальнейшее чтение

Чем отличается MainActivity.this от getApplicationContext ()

...