Как? Прослушивание включения настройки местоположения (приложение для Android)JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как? Прослушивание включения настройки местоположения (приложение для Android)

Сообщение Anonymous »

Поэтому я провел последние несколько недель, работая над своим приложением для Android и ища лучший способ реализовать то, что мне нужно сделать, но до сих пор не могу сделать это правильно. Любая/вся помощь очень ценится, поскольку я все еще разбираюсь в вещах..

Задача:

(Предполагая, что «Местоположение»/ Настройка GPS в настоящее время отключена), мне нужно, чтобы мое приложение постоянно прослушивало настройку «Местоположение». На этом этапе просто запустите действие.

< h2>Идеи:

По моему мнению, это может сработать по-разному:
  • LocationListener с использованием «onProviderEnabled»
  • GpsStatusListener с использованием «onGpsStatusChanged» с «GPS_EVENT_STARTED»
  • GpsProvider требует Satellite (чтобы определить, запускается ли он) или каким-то образом используйте константу/int «AVAILABLE» GpsProvider
  • SettingInjectorService с помощью «ACTION_SERVICE_INTENT» " (и/или) "ACTION_INJECTED_SETTING_CHANGED" с "onGetEnabled" или "isEnabled"
  • Настройки. Защитите с помощью "LOCATION_MODE" != "LOCATION_MODE_OFF"
  • ContentObserver/ContentResolver
  • Intent getAction (...)
    Какое-то «если/иначе»
Вопросы:

Мы будем очень признательны за любые советы или ответы на любой из следующих вопросов..
  • Какая из приведенных выше идей будет лучшим способом выполнения задачи? Чем проще, тем лучше, но самое главное — он должен постоянно прослушиваться и мгновенно реагировать, когда включена настройка местоположения.
  • В зависимости от того, какой из них Идеи, приведенные выше, работают лучше всего, как мне их реализовать? (Например, нужен ли мне BroadcastListener? или Служба? и как все это собрать воедино?
I искренне ценю любой совет или помощь, которую вы можете мне предоставить. Я все еще разбираюсь во всем этом, но достаточно уверен в себе, чтобы сделать это, и хочу опубликовать свое первое приложение.. Так что спасибо, это очень много значит и мне очень поможет.



РЕДАКТИРОВАТЬ:

Хорошо, вот что у меня есть на данный момент...

Вот мой приемник:

MyReceiver.Java


Код: Выделить всё

public class MyReceiver extends BroadcastReceiver {

private final static String TAG = "LocationProviderChanged";

boolean isGpsEnabled;
boolean isNetworkEnabled;

public MyReceiver() {
// EMPTY

// MyReceiver Close Bracket
}

// START OF onReceive
@Override
public void onReceive(Context context, Intent intent) {

// PRIMARY RECEIVER
if (intent.getAction().matches("android.location.PROVIDERS_CHANGED")) {

Log.i(TAG, "Location Providers Changed");

LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
isGpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

Toast.makeText(context, "GPS Enabled: " + isGpsEnabled + " Network Location Enabled: " + isNetworkEnabled, Toast.LENGTH_LONG).show();

// START DIALOG ACTIVITY
if (isGpsEnabled || isNetworkEnabled) {
Intent runDialogActivity = new Intent(context, DialogActivity.class);
context.startActivity(runDialogActivity);

}

}

// BOOT COMPLETED (REPLICA OF PRIMARY RECEIVER CODE FOR WHEN BOOT_COMPLETED)
if (intent.getAction().matches("android.intent.action.BOOT_COMPLETED")) {

Log.i(TAG, "Location Providers Changed Boot");

LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
isGpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);

Toast.makeText(context, "GPS Enabled Boot: " + isGpsEnabled + " Network Location Enabled Boot:  " + isNetworkEnabled, Toast.LENGTH_LONG).show();

// START DIALOG ACTIVITY
if (isGpsEnabled || isNetworkEnabled) {
Intent runDialogActivity = new Intent(context, DialogActivity.class);
context.startActivity(runDialogActivity);

}

}

// onReceive CLOSE BRACKET
}

// CLOSE OF FULL CLASS
}
А вот как выглядит манифест:

Manifest.XML Помимо этих файлов у меня есть следующие файлы:

Код: Выделить всё

MainActivity.Java
и DialogActivity.Java, оба с файлами макета,

Код: Выделить всё

activity_main.xml
и Activity_dialog.xml, чтобы они соответствовали им.

Итак, если я правильно понимаю, когда пользователь загружает приложение и открывает его, мой Запустится MainActivity.Java и соответствующий макет. Но я собираюсь использовать его только как экран настроек. Итак, как только они откроют приложение в первый раз, приемник вещания должен автоматически начать прослушивать настройку LOCATION, чтобы включить ее, верно? Я также хочу, чтобы прослушиватель широковещательной рассылки продолжал слушать даже после того, как он получит начальную широковещательную рассылку (так что мой onReceive все еще срабатывает, если они выключают настройку LOCATION, а затем снова включают ее..

Итак (А) Как выглядит мой код на данный момент?

И (Б) Что нужно добавить, чтобы выполнить то, что я только что описал?

и (C) Бег эта ошибка выдает, когда я включаю настройку LOCATION.

..Как это исправить?:

Код: Выделить всё

java.lang.RuntimeException: Unable to start receiver com.bryce.projects.servicesthreadsetc.MyReceiver: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
Еще раз спасибо за помощь!


Подробнее здесь: https://stackoverflow.com/questions/363 ... ndroid-app
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»