2012-06-13 4 views
4

무료 버전과 유료 버전의 두 가지 버전의 앱이 있지만 별도로 코드를 관리하고 있습니다. 코드를 쉽게 유지 관리하기 위해 마침내 코드를 두 라이브러리에서 참조하는 라이브러리로 옮겼습니다.위젯이 사라집니다.

AppwidgetProvider을 변경하면 실행 프로그램이 기존 위젯을 삭제하게되어 사용자가 위젯을 다시 만들 필요가 없도록 해당 클래스를 라이브러리에서 다시 이동시켜 공급자를 동일하게 유지합니다. 실행 프로그램은 더 이상 위젯을 삭제하지 않지만 대신 업데이트 후 표시되지 않습니다.

구성 요소 이름에 AppWidgetManager.getAppWidgetIds을 호출하면 항상 그렇듯이 appwidgetid가 그대로 유지됩니다. 위젯을 업데이트하기 위해 appwidgetprovider 및 서비스가 여전히 호출되고 /data/system/appwidgets.xml에는 여전히 위젯이 표시되지만 시작 프로그램에는 위젯이 표시되지 않습니다.

위젯 위치를 길게 누르면 배경 무늬 선택기가 표시되는 것처럼 보이지 않습니다. 새로운 위젯을 만들 수는 있지만 위젯을 다시 만들 것을 요구함으로써 사용자를 좌절시키고 싶지는 않습니다. 런처 또는 AppwidgetService에 의해 발생한 오류는 로그에 표시되지 않습니다.

업데이트 후 위젯이 렌더링을 중단하는 이유는 무엇입니까? 대부분의 코드를 별도의 라이브러리로 옮기는 것과 관련이 있습니다. 감사!

편집 : 나는 에뮬레이터, API 레벨 15,

+0

안녕하세요, "AppwidgetProvider를 변경하면 실행 프로그램이 기존 위젯을 삭제하게됩니다"라고 언급하셨습니다. AppwidgetProvider를 확장하는 클래스의 코드를 변경한다는 의미입니까? – jclova

답변

0

확인 stock 런처에서 테스트하고있어, 나는 해결책을 찾았지만 나는 방법에 대해 읽은 후 ...

을 무엇인지에 대한 아픈 느낌 매니페스트에 선언 된 클래스는 변경해서는 안됩니다. 매니페스트의 각 클래스를 앱의 클래스로 만들어 라이브러리의 해당 클래스를 확장했습니다. 그런 다음 forName을 사용하여 올바른 클래스를 포함하도록 모든 Intent를 변경해야했습니다. 그래서,이 시나리오의 예입니다

응용 프로그램 패키지 : com.sample.package

활동 MyActivity

라이브러리 : com.sample.package.core

활동 MyActivity

앱에 MyActivity가 있고 라이브러리에 MyActivity가 있습니다. 앱의 MyActivity는 단순히 com.sample.package.core.MyActivity를 확장합니다. 그런 다음

, 어떤 발생 ...

new Intent(context, MyActivity.class) 

가 ... 도서관에서이되어야한다 ...
new Intent(context, Class.forName(context.getPackageName() + "." + MyActivity.class.getSimpleName()); 

매니페스트를 통해이 작업을 수행 할 수있는 방법이 있다면

, 주시기 바랍니다 나 알아!

+0

별칭을 사용해 보셨습니까? – 3c71