2012-03-24 25 views
10

Tài liệu (http://developer.android.com/guide/topics/manifest/manifest-element.html#uid) chỉ nói rằng tôi không thể sử dụng chuỗi thô và cấp API mà nó đã được thêm vào, nhưng không giải thích tại sao tôi muốn sử dụng nó. Nếu tôi đã đặt android: sharedUserID thành "com.foo.bar" thì tôi nên đặt giá trị nào vào chuỗi được tham chiếu bởi android: sharedUserLabel và quan trọng nhất là tại sao !?Android: sharedUserLabel là gì và giá trị gia tăng nào được thêm trên Android: sharedUserID?

Cảm ơn bạn

Trả lời

7

Theo như tôi hiểu từ AOSP thực sự bạn có thể sử dụng nhãn này chỉ để hiển thị một tên khá cho một người dùng (nếu bạn có nhiều quá trình trong cùng một uid). Ví dụ: đây là một phần của mã trong tệp RunningState.java:

// If we couldn't get information about the overall 
    // process, try to find something about the uid. 
    String[] pkgs = pm.getPackagesForUid(mUid); 

    // If there is one package with this uid, that is what we want. 
    if (pkgs.length == 1) { 
     try { 
      ApplicationInfo ai = pm.getApplicationInfo(pkgs[0], 0); 
      mDisplayLabel = ai.loadLabel(pm); 
      mLabel = mDisplayLabel.toString(); 
      mPackageInfo = ai; 
      return; 
     } catch (PackageManager.NameNotFoundException e) { 
     } 
    } 

    // If there are multiple, see if one gives us the official name 
    // for this uid. 
    for (String name : pkgs) { 
     try { 
      PackageInfo pi = pm.getPackageInfo(name, 0); 
      if (pi.sharedUserLabel != 0) { 
       CharSequence nm = pm.getText(name, 
         pi.sharedUserLabel, pi.applicationInfo); 
       if (nm != null) { 
        mDisplayLabel = nm; 
        mLabel = nm.toString(); 
        mPackageInfo = pi.applicationInfo; 
        return; 
       } 
      } 
     } catch (PackageManager.NameNotFoundException e) { 
     } 
    } 

Về cơ bản, những điều sau đây. Lúc đầu, nó cố gắng để có được thông tin về quá trình tổng thể. Nếu nó không tìm thấy, nó sẽ cố gắng để có được thông tin bằng cách sử dụng UID của ứng dụng như một tham số (đây là một phần của mã mà tôi đã đưa ra ở đây). Nếu chỉ có một gói với UID này thì thông tin về quá trình này được lấy từ gói này. Nhưng nếu có một số gói (sử dụng shareUserId) thì nó lặp lại và cố gắng tìm tên chính thức (khá).

Là một xác nhận lời nói của tôi Tôi tìm thấy chuỗi sau đây trong MediaProvider:

<!-- Label to show to user for all apps using this UID. --> 
<string name="uid_label">Media</string> 

Như vậy, tất cả các quá trình sử dụng android:sharedUserId="android.media" sẽ có tên Media.

Tôi không nghĩ rằng tính năng này sẽ được các nhà phát triển thông thường sử dụng rất nhiều và hữu ích cho họ.

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