반응형
비활동 클래스(LocationManager)에서 getSystemService를 사용하려면 어떻게 해야 합니까?
주요 Activities OnCreate 메서드에서 무거운 작업을 다른 클래스로 이동하는 데 문제가 있습니다.
비활동 클래스에서 getSystemService를 호출하려고 하면 예외가 발생합니다.
lmt.dll:
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);
}
}
섬유질 섬유질하다
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;
}
}
파일 클래스에 컨텍스트를 전달해야 합니다.
한 가지 해결책은 당신을 위해 이와 같은 생성자를 만드는 것입니다.fyl
클래스:
public class fyl {
Context mContext;
public fyl(Context mContext) {
this.mContext = mContext;
}
public Location getLocation() {
--
locationManager = (LocationManager)mContext.getSystemService(context);
--
}
}
활동 클래스에서 파일의 개체를 만듭니다.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);
이 문제를 해결하는 한 가지 방법은 인스턴스에 대한 정적 클래스를 만드는 것입니다.AS3에서 많이 사용했습니다. 안드로이드 개발에도 큰 도움이 되었습니다.
구성.java
public final class Config {
public static MyApp context = null;
}
내 앱.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);
활동에서 사용:
private Context context = this;
........
if(Utils.isInternetAvailable(context){
Utils.showToast(context, "toast");
}
..........
사용률:
public class Utils {
public static boolean isInternetAvailable(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected();
}
}
이게 도움이 될지는 모르겠지만, 저는 이렇게요.
LocationManager locationManager = (LocationManager) context.getSystemService(context.LOCATION_SERVICE);
작업자와 같은 일부 비활동 클래스의 경우 공용 생성자에 컨텍스트 개체가 이미 지정되어 있습니다.
Worker(Context context, WorkerParameters workerParams)
예를 들어 클래스의 개인 컨텍스트 변수에 저장할 수 있습니다.mContext
), 그 다음, 예를 들어
mContext.getSystenService(Context.ACTIVITY_SERVICE)
만약 당신이 그것을 단편적으로 얻고 싶다면, 이것은 코틀린에서 작동할 것입니다.
requireActivity().getSystemService(LOCATION_SERVICE) as LocationManager
언급URL : https://stackoverflow.com/questions/4870667/how-can-i-use-getsystemservice-in-a-non-activity-class-locationmanager
반응형
'programing' 카테고리의 다른 글
AWS SCT에 필요한 대상 권한으로서의 MariaDB (0) | 2023.09.01 |
---|---|
JWT를 데이터베이스에 저장하는 것이 말이 됩니까? (0) | 2023.08.27 |
Facebook 팬 이름 검색 (0) | 2023.08.27 |
참조일 때 프로그래밍 방식으로 색상 값 가져오기(테마) (0) | 2023.08.27 |
페이지 로드 시 Twitter 부트스트랩 회전 장치가 자동으로 미끄러지지 않도록 방지 (0) | 2023.08.27 |