Как я могу использовать getSystemService в classе non-activity (LocationManager)?
У меня возникли проблемы с загрузкой задач из основного метода Activity OnCreate в другой class, чтобы сделать тяжелый подъем.
Когда я пытаюсь вызвать getSystemService из classа non-Activity, генерируется исключение.
Любая помощь будет принята с благодарностью 🙂
- Переместить макеты, когда отображается мягкая клавиатура?
- Проверка сообщения тоста в эндшпиле android
- Добавление файла .so в Android Studio
- Как работает «? Android: attr / activatedBackgroundIndicator»?
- Нити AsyncTask никогда не умирают
lmt.java:
package com.atClass.lmt; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; import android.location.Location; public class lmt extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); fyl lfyl = new fyl(); Location location = lfyl.getLocation(); String latLongString = lfyl.updateWithNewLocation(location); TextView myLocationText = (TextView)findViewById(R.id.myLocationText); myLocationText.setText("Your current position is:\n" + latLongString); } }
fyl.java
package com.atClass.lmt; import android.app.Activity; import android.os.Bundle; import android.location.Location; import android.location.LocationManager; import android.os.Bundle; import android.widget.TextView; import android.content.Context; public class fyl { public Location getLocation(){ LocationManager locationManager; String context = Context.LOCATION_SERVICE; locationManager = (LocationManager)getSystemService(context); String provider = LocationManager.GPS_PROVIDER; Location location = locationManager.getLastKnownLocation(provider); return location; } public String updateWithNewLocation(Location location) { String latLongString; if (location != null){ double lat = location.getLatitude(); double lng = location.getLongitude(); latLongString = "Lat:" + lat + "\nLong:" + lng; }else{ latLongString = "No Location"; } return latLongString; } }
- Виджеты не реагируют при повторном добавлении кода
- Как анимировать маркер в android-карте api V2?
- Начать работу с помощью пользовательского действия
- Android: Разница между Parcelable и Serializable?
- Как я могу вызвать экран настроек Wi-Fi из своего приложения с помощью Android
- Очистить кэш в приложении Android программно
- API Google Maps V2 'не удалось загрузить карту. Не удалось связаться с серверами Google Servers,
- Как исправить ошибку android 4.4.2 ClassNotFoundException: не нашел class «com.google.firebase.provider.FirebaseInitProvider» по пути: DexPathList
Вы должны передать свой контекст своему classу.
Одним из решений является создание такого конструктора для вашего classа fyl
:
public class fyl { Context mContext; public fyl(Context mContext) { this.mContext = mContext; } public Location getLocation() { -- locationManager = (LocationManager)mContext.getSystemService(context); -- } }
Таким образом, в вашем classе активности создайте объект fyl в функции onCreate
следующим образом:
package com.atClass.lmt; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; import android.location.Location; public class lmt extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); fyl lfyl = new fyl(this); //Here the context is passing Location location = lfyl.getLocation(); String latLongString = lfyl.updateWithNewLocation(location); TextView myLocationText = (TextView)findViewById(R.id.myLocationText); myLocationText.setText("Your current position is:\n" + latLongString); } }
Вы можете пойти на это:
getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
Один из способов, с которым я столкнулся, – создать статический class для экземпляров. Я использовал его много в AS3. Я отлично поработал для меня в разработке Android.
Config.java
public final class Config { public static MyApp context = null; }
MyApp.java
public class MyApp extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Config.context = this; } ... }
Затем вы можете получить доступ к контексту или с помощью Config.context
LocationManager locationManager; String context = Context.LOCATION_SERVICE; locationManager = Config.context.getSystemService(context);
Я не знаю, поможет ли это, но я сделал это:
LocationManager locationManager = (LocationManager) context.getSystemService(context.LOCATION_SERVICE);
(LocationManager) ((lmt) new Activity()).getSystemService(context);
Попробуйте этот код. Это будет работать, только если вы запустили работу, прежде чем вызывать эту строку кода. Поскольку деятельность должна быть создана и работать.