2011-12-27 3 views
9

내 응용 프로그램에서 패키지 이름의 이름을 알아야합니다. 나는 활동에서 그것을 움켜 잡고 싶을 때 아무런 문제가 없지만 나는 다른 수업에서 그것을 할 수 없다. 다음 코드는 활동에서 작동하지만 간단한 클래스에서 왜 문제가 있는지 알 수 없습니다. android, 패키지 이름을 얻는 방법?

String packageName = getPackageName(); 

내 클래스에서이 코드를 작성했습니다 :

Context context = getApplicationContext(); 
String packageName = context.getPackageName(); 

하지만 컴파일러는 getApplicationContext() 방법은이 클래스에 대한 정의되지 말했다.

이 클래스 내에서 패키지 이름을 어떻게 가져올 수 있습니까? 인스턴스에

샘플 코드

ClassA instanceOfClass = new ClassA(); 
String packageName = instanceOfClass.getClass().getPackage().getName(); 
System.out.println("Package Name = " + packageName); 
+0

왜 downvote? – barry

답변

11

간단하거나 다른 방법으로 Context를 도우미 클래스 생성자에 전달하는 것입니다.

MyClassConstructor(Context context){ 

     String packageName = context.getPackageName(); 
} 
14

는 ContextWrapper하는 방법 (활동의 슈퍼 클래스)입니다. 당신이 당신의 클래스에서 사용하려면

당신은 사용 후 다음이

http://developer.android.com/reference/android/content/ContextWrapper.html#getPackageName()

class MyClass { 
    Context mContext; 

    public MyClass(Context ctx) [ 
     this.mContext = ctx; 

    } 

    String getPackageName() { 
     mContext.getPackageName(); 
    } 

} 
+0

하지만 ClassA의 새로운 인스턴스를 새로 만들지는 않습니다. 사실상 아무런 이유없이 자체적으로 일부 코드를 수행 할 것입니까? – Lumis

+0

내 프로젝트에 라이브러리가 있고 프로젝트의 컨텍스트를 lib에 전달합니다. lib에서 내 프로젝트의 패키지 이름이 아닌 lib의 패키지 이름을 가져 오는 context.getPackageName()을 호출합니다. lib에서 프로젝트의 패키지 이름을 가져올 수 있습니까? 프로젝트의 맥락? –

0

getApplicationContext()를 getClass().getPackage().getName()를 사용하여 패키지 이름을 얻을 수있는 클래스의 인스턴스를 사용

0

사용 A A 컨텍스트의 참조 또는 그 서브 클래스를 통과해야합니다

ActivityManager am = (ActivityManager) getSystemService(Activity.ACTIVITY_SERVICE); 

         String packageName2 = am.getRunningTasks(1).get(0).topActivity.getPackageName(); 
2

gradle 빌드를 사용하는 경우 BuildConfig.APPLICATION_ID을 사용하여 응용 프로그램의 패키지 이름을 가져옵니다.

-1

간단한 대답은 클래스 이름 생성자를 만들고 그 생성자에서의 ApplicationContext을 통과입니다 -

ClassConstructor(Context context){ 

     String packageName = context.getPackageName(); 
} 
+1

답변을 게시 할 때 답변이 이미 다른 답변에서 언급되지 않은 내용인지 여부를 고려하십시오. – laalto

관련 문제