2011-09-21 24 views
6

tôi cần phải lấy một giá trị từ tập tin AndroidManifest.xml, lưu trữ dưới dạng dữ liệu meta:được activityInfo siêu dữ liệu trong phương pháp onCreate

<meta-data android:value="3" android:name="myInterestingValue" /> 

Trong phương pháp onCreate, tôi gọi là phương pháp sau đây:

private Object getMetaData(String name) { 
    try { 
     ActivityInfo ai = getPackageManager().getActivityInfo(this.getComponentName(), PackageManager.GET_META_DATA); 
     Bundle metaData = ai.metaData; 
     if(metaData == null) { 
      debug("metaData is null. Unable to get meta data for " + name); 
     } 
     else { 
      Object value = (Object)metaData.get(name); 
      return value; 
     } 
    } catch (NameNotFoundException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

Nhưng metaData luôn luôn là rỗng. Có thể truy cập vào metaData trong phương thức onCreate không? tức là hoạt động chưa được khởi tạo đầy đủ.

Trả lời

22

Bạn sẽ cần sử dụng cờ GET_ACTIVITIESGET_META_DATA.

ActivityInfo ai = getPackageManager() 
     .getActivityInfo(this.getComponentName(), PackageManager.GET_META_DATA); 
+1

Cảm ơn, điều này đã giúp. Bạn có lỗi đánh máy, phải là: ActivityInfo app = getPackageManager(). GetActivityInfo (this.getComponentName(), PackageManager.GET_ACTIVITIES | PackageManager.GET_META_DATA); – ajh158

1

Nếu bạn quan tâm, android-metadata là một khuôn khổ giúp dễ dàng nhận siêu dữ liệu từ tệp kê khai Android. Cách bạn sẽ nhận được siêu dữ liệu ở trên bằng cách sử dụng android-metadata là:

int val = ManifestMetadata.get (context).getValue ("myInterestingValue", Integer.class); 

Tiết lộ đầy đủ: Tôi là tác giả của siêu dữ liệu android.

+0

Nó có được hợp nhất trong khung androidannotations (https://github.com/excilys/androidannotations) không? – mrroboaat

0

Tôi đã thử câu trả lời của jasonj nhưng nó không hoạt động. Để truy xuất siêu dữ liệu từ tệp kê khai, tôi phải nhận được mã sau đây

ApplicationInfo ai = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA); 
Bundle bundle = ai.metaData; 
+0

getApplicationInfo được sử dụng để lấy siêu dữ liệu từ phần tử . Để lấy siêu dữ liệu từ phần tử , bạn phải sử dụng getActivityInfo như được mô tả –

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