Я знаю, что это распространенный вопрос, на который были получены ответы несколько раз ... Но я ищу ответ на конкретную проблему. Я написал метод, который требуется для возврата текущего lat/long в качестве строки. Код выглядит следующим образом:Получение текущего местоположения в Android
public class LibraryProvider {
public String basicMethod(String string) {
String text = string;
LocationManager locationManager;
String provider;
locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, false);
Location location = locationManager.getLastKnownLocation(provider);
if (location != null) {
text = "Provider " + provider + " has been selected.";
int lat = (int) (location.getLatitude());
int lng = (int) (location.getLongitude());
text = text + "\n" + "lat: " + String.valueOf(lat);
text = text + "\n" + "lng: " + String.valueOf(lng);
} else {
text = "Location not available";
}
return text;
}
}
Однако андроид студия не позволяет this.get System Service:
не может решить метод getSystemService (java.lang.String)
Я новичок в андроиде и не понимаю контекста и намерений ... Я думаю, что проблема имеет какое-то отношение к этому.
(отредактированный) кода я использую для загрузки выше класса как под
private final class ServiceHandler extends android.os.Handler {
public ServiceHandler(Looper looper){
super(looper);
}
public void handleMessage(Message msg){
dynamicClassLoader();
}
String text;
private void dynamicClassLoader(){
final String apkFile =Environment.getExternalStorageDirectory().getAbsolutePath()+"/Download/apkFile.apk";
String className = "com.va.android.level2.lib.LibraryProvider";
final File optimisedDexOutputPath = getDir("outdex", 0);
DexClassLoader classLoader = new DexClassLoader(apkFile,optimisedDexOutputPath.getAbsolutePath(),null,getClassLoader());
try{
Class loadedClass = classLoader.loadClass(className);
// LibraryInterface lib = (LibraryInterface) loadedClass.newInstance();
// lib.basicMethod("hello");
Object obj =(Object)loadedClass.newInstance();
Method method = loadedClass.getMethod("basicMethod", String.class);
text = (String) method.invoke(obj,"added method");
showOutput(text);
} catch (Exception e){
e.printStackTrace();
}
}
private void showOutput(final String str){
mServiceHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(MyService.this,str, Toast.LENGTH_LONG).show();
}
});
}
}
раньше он работал, но теперь это поднимает некоторые исключения в loadedClass.newInstance(); ..... я думаю, мне нужно передать контекст ... но как ??
вам требуется активность Context эталонным вместо класса. –
ваш класс, не распространяющий какую-либо деятельность, контекст класса неверен. Пожалуйста, расширьте свой класс с помощью Activity – Raghavendra
. Я действительно пытаюсь загрузить этот .apk с помощью DexClassLoader в службу другого приложения –