마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Method invoke에러

0 추천

안드로이드 개발자 분들께 질문 드립니다.

해당 소스는 어플리케이션에서 시스템 언어를 변경하기 위한 코드 입니다.

저도 구글링해서 발견 했구요.

해당 코드를 디버깅 하면 맨 아랬줄 methodUpdateConfiguration.invoke(amn, config); 에서

 W/System.err(6005): java.lang.reflect.InvocationTargetException 와 같은 에러가 발생 합니다.

찾아보니 The solution is that when you are creating the object of the class use package name also along with class name so that compiler knows what class it has to use.

이 처럼 클래스를 생성 할때 패키지 명을 주라는데 무슨 뜻인가요?

전체 소스 코드 첨부 합니다.

 

try{

Locale locale = new Locale("fr");
 
 
Class amnClass = Class.forName("android.app.ActivityManagerNative");
Object amn = null;
Configuration config = null;
 
 
Method methodGetDefault = amnClass.getMethod("getDefault");
 
methodGetDefault.setAccessible(true);
amn = methodGetDefault.invoke(amnClass);
 
Log.e("HOLIC", String.format("amn = methodGetDefault.invoke(amnClass)") );
 
Method methodGetConfiguration = amnClass.getMethod("getConfiguration");
 
methodGetConfiguration.setAccessible(true);
config = (Configuration) methodGetConfiguration.invoke(amn);
 
Class configClass = config.getClass();
 
 
Field f = configClass.getField("userSetLocale");
 
f.setBoolean(config, true);
config.locale = locale;
      
Method methodUpdateConfiguration = amnClass.getMethod("updateConfiguration", Configuration.class);
 
methodUpdateConfiguration.setAccessible(true);
// 매니페스트에 android.permission.CHANGE_CONFIGURATION 추가해야함.
 
methodUpdateConfiguration.invoke(amn, config);
 
} catch(Exception e)
{
Log.e("HOLIC", String.format("error_fuck") );
           e.printStackTrace();
}
 

 

 

서홍이 (200 포인트) 님이 2013년 5월 9일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...