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

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как? Прослушивание включения настройки местоположения (приложение для Android)

Сообщение Anonymous »

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

Задача:

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

Идеи:

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

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



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

ОК Итак, вот что у меня есть на данный момент...

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

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, а затем снова включат его.

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

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

и (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 МБ.

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