내 앱에는 GPS 위치가있는 일부 개체가 있습니다. 현재 그들과 함께 할 수있는 유일한 일은지도에 표시하는 것 뿐이지 만 사용자 위치를 알아야하는 다른 기능을 구현할 계획입니다. 일부 사용자는 이러한 기능을 사용하고 싶지 않기 때문에 앱에 위치 권한을 추가하고 싶지 않습니다.너무 많은 권한 요청을 피하기 위해 플러그인에서 시스템 서비스 공유
제 아이디어는 플러그인 만 위치 정보를 제공하는 별도의 apk (일종의 플러그인)를 사용하여 플러그인 만 위치 권한을 요청해야한다는 것입니다.
메인 애플리케이션이 플러그인의 LocationManager를 사용할 수 있도록 호환되지 않는 인터페이스가있는 맞춤 서비스를 만들지 않고 직접 플러그인을 사용하여 시스템 서비스 (LocationManager)를 공유 할 수 있습니까? 이렇게하면 MyLocationOverlay 또는 다른 클래스와 같은 기존 클래스를 사용할 수 있습니다. 주요 응용 프로그램은 다음과 같이 이러한 클래스에 ContextWrapper을 전달할 수 :
public static class LocationContext extends ContextWrapper {
public LocationContext(Context base) {
super(base);
}
@Override
public Object getSystemService(String name) {
if (name.equals(LOCATION_SERVICE)) {
// Return the LocationManager service of the plugin here...
}
return super.getSystemService(name);
}
}
재미있을 것 같습니다. 두 APK 모두 동일한 프로세스와 sharedUserId를 가지고 있다고 가정하면 주 앱이 LocationManager를 가져올 수있는 방법을 보여줄 수 있습니까? – Tom
필자는 테스트 한 것보다 훨씬 쉽습니다. 빈 프로젝트를 만들었고 android : sharedUserId와 android : 프로세스를 내 메인 앱의 패키지 이름으로 설정하고 plugins AndroidManifest.xml에 uses-permission 태그를 추가했습니다. 이제 기본 응용 프로그램은 플러그인에 정의 된 모든 권한을 가지며 사용자 위치를 가져올 수있었습니다. 따라서이 방법은 플러그인에서 한 줄의 코드가 필요하지 않습니다. – Tom
Google은 권장하지 않습니다. http://stackoverflow.com/questions/6354035/two-android-applications-with-same-user-id/6354073#6354073 또한 애플리케이션 A 권장 사항이 재발행 된 경우 결함이있는 것으로 입증되었습니다. 새로운 응용 프로그램 A는 더 이상 원래 사용자 ID로 저장 한 파일에 액세스 할 수 없으므로 - 적어도 Android 2.x 시리즈를 통해 - Android는 사용자 ID가 변경 될 때 자동으로 파일의 사용자 ID를 변경하지 않습니다. 앱이 변경되었습니다. – CommonsWare