2011-12-27 41 views
9

Trong đơn xin của tôi, tôi cần phải biết tên của tên gói. Tôi không có vấn đề khi tôi muốn lấy nó trong các hoạt động nhưng tôi không thể lấy nó trong các lớp khác. Đoạn mã sau đang làm việc trong hoạt động nhưng tôi không biết tại sao nó có vấn đề trong lớp đơn giản.android, cách lấy tên gói?

String packageName = getPackageName(); 

Trong lớp của tôi, tôi đã cố gắng để viết mã này:

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

nhưng trình biên dịch cho biết phương pháp getApplicationContext() là undefined cho lớp này.

Tôi làm cách nào để lấy tên gói trong lớp học này?

+0

Tại sao downvote? – barry

Trả lời

11

Cách đơn giản, hoặc cách khác là chuyển Ngữ cảnh vào hàm tạo lớp trợ giúp:

MyClassConstructor(Context context){ 

     String packageName = context.getPackageName(); 
} 
14

Sử dụng thể hiện của các lớp bạn có thể nhận tên gói bằng cách sử dụng getClass().getPackage().getName() đến dụ

Mẫu Mã

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

Nhưng bạn không tạo ra một trường hợp hoàn toàn mới của ClassA mà thực sự là sẽ thực hiện một số mã trên riêng của mình không có lý do chính đáng? – Lumis

+0

Tôi có một thư viện trong dự án của mình và tôi chuyển ngữ cảnh từ dự án của tôi tới lib.The lib gọi context.getPackageName() để lấy tên gói của lib không phải tên gói của dự án của tôi. Làm thế nào lib có thể nhận tên gói của dự án của tôi thông qua bối cảnh của dự án? –

0

getApplicationContext() là một phương pháp ContextWrapper (siêu lớp của hoạt động).

Nếu bạn muốn sử dụng nó trong các lớp học của bạn, bạn sẽ phải vượt qua một tài liệu tham khảo của một bối cảnh hay lớp con của nó và sau đó sử dụng nó

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

Sử dụng sau

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

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

Nếu bạn sử dụng xây dựng gradle, hãy sử dụng: BuildConfig.APPLICATION_ID để lấy tên gói của ứng dụng.

-1

câu trả lời đơn giản nhất là tạo ra một constructor tên lớp và vượt qua ApplicationContext trong constructor đó -

ClassConstructor(Context context){ 

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

Khi đăng câu trả lời, hãy cân nhắc xem câu trả lời của bạn có góp phần gì đó chưa được nói trong các câu trả lời khác không. – laalto

Các vấn đề liên quan