2013-08-14 44 views
9

Tôi phải truy xuất theo chương trình các quyền từ tệp manifest.xml của ứng dụng Android và tôi không biết cách thực hiện.Truy xuất theo chương trình các quyền từ manifest.xml trong android

Tôi đọc the post here nhưng tôi không hoàn toàn hài lòng với câu trả lời. Tôi đoán sẽ có một lớp trong API android cho phép truy xuất thông tin từ tệp kê khai.

Cảm ơn bạn.

+1

Đây không phải là định dạng phù hợp cho bài đăng StackOverflow kiểu Câu hỏi thường gặp. Đặt câu hỏi, sau đó trả lời câu hỏi của riêng bạn. – CommonsWare

+0

Ho ... Tôi sẽ chỉnh sửa câu hỏi theo nhận xét của bạn sau đó. –

+0

Tôi chưa thể đăng câu trả lời của mình, nhưng đối với những người sẽ đọc nội dung này, tôi khuyên bạn nên xem [PackageManager class] (http://developer.android.com/reference/android/content/pm/PackageManager .html) –

Trả lời

12

Bạn có thể sử dụng phương pháp này:

//for example, permission can be "android.permission.WRITE_EXTERNAL_STORAGE" 
public boolean hasPermission(String permission) 
{ 
    try { 
     PackageInfo info = getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_PERMISSIONS); 
     if (info.requestedPermissions != null) { 
      for (String p : info.requestedPermissions) { 
       if (p.equals(permission)) { 
        return true; 
       } 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return false; 
} 
+2

Đây KHÔNG phải là những gì OP yêu cầu ... –

+0

Đó không phải là những gì tôi đã yêu cầu, nhưng nó khiến tôi tìm cách làm những gì tôi muốn bằng cách sử dụng hầu hết mã được đề xuất và không phải phân tích cú pháp tệp kê khai. Trong OP, tôi cũng đã nói rằng tôi muốn tránh các giải pháp được trình bày ở nơi khác, chủ yếu bao gồm phân tích cú pháp tệp kê khai. –

-4

Bạn có thể sử dụng chức năng này:

public boolean hasPermission(Context ctx,String permission){ 
     return ctx.getPackageManager().checkPermission(permission, ctx.getPackageName()) 
       == PackageManager.PERMISSION_GRANTED); 
} 

Cách sử dụng:

hasPermission(this,Manifest.permission.GET_ACCOUNTS); 
+2

Đây là một câu trả lời rất xấu. Bởi vì câu hỏi không phải là về kiểm tra sự cho phép của hệ thống (nếu nó được cấp). Câu hỏi đặt ra là về danh sách các quyền được khai báo trong 'AndroidManifest.xml' – StefMa

+0

Điều này là để kiểm tra xem liệu thời gian chạy có sẵn hay không. Câu hỏi đặt ra là kiểm tra xem sự cho phép có được thêm vào tệp kê khai hay không. –

0

Sử dụng này:

public static String getListOfPermissions(final Context context) 
{ 
    String _permissions = ""; 

    try 
    { 
     final AssetManager _am = context.createPackageContext(context.getPackageName(), 0).getAssets(); 
     final XmlResourceParser _xmlParser = _am.openXmlResourceParser(0, "AndroidManifest.xml"); 
     int _eventType = _xmlParser.getEventType(); 
     while (_eventType != XmlPullParser.END_DOCUMENT) 
     { 
      if ((_eventType == XmlPullParser.START_TAG) && "uses-permission".equals(_xmlParser.getName())) 
      { 
       for (byte i = 0; i < _xmlParser.getAttributeCount(); i ++) 
       { 
        if (_xmlParser.getAttributeName(i).equals("name")) 
        { 
         _permissions += _xmlParser.getAttributeValue(i) + "\n"; 
        } 
       } 
      } 
      _eventType = _xmlParser.nextToken(); 
     } 
     _xmlParser.close(); // Pervents memory leak. 
    } 
    catch (final XmlPullParserException exception) 
    { 
     exception.printStackTrace(); 
    } 
    catch (final PackageManager.NameNotFoundException exception) 
    { 
     exception.printStackTrace(); 
    } 
    catch (final IOException exception) 
    { 
     exception.printStackTrace(); 
    } 

    return _permissions; 
} 
// Test: Log.wtf("test", getListOfPermissions(getApplicationContext())); 
+2

Xin chào. Cảm ơn câu trả lời, mặc dù nó là một câu hỏi 2 tuổi mà đã có một câu trả lời. Về câu trả lời của bạn, tôi vẫn sẽ sử dụng câu trả lời được chấp nhận làm cơ sở cho giải pháp vì nó sử dụng lớp được thiết kế để truy xuất thông tin về ứng dụng. Tôi tin rằng điều này đáng tin cậy hơn việc phân tích cú pháp tệp kê khai, có cấu trúc có khả năng thay đổi tùy thuộc vào phiên bản Android được nhắm mục tiêu. Nó cũng ngắn hơn. Nhân tiện, bạn có downvote OP không? –

+0

@AlexisLeCompte No. –

+0

Thay vì kiểm tra các quyền khác nhau cho từng ứng dụng khác nhau, bạn phải xác định trong mã, ứng dụng này thực sự thuận tiện, đặc biệt là với Android 6 trở lên. Lưu ngày của tôi và nhận được một upvote! :-) – Anticro

4

Đây là một phương pháp tiện ích hữu ích thực hiện điều đó.

public static String[] retrievePermissions(Context context) { 
    try { 
     return context 
       .getPackageManager() 
       .getPackageInfo(context.getPackageName(), PackageManager.GET_PERMISSIONS) 
       .requestedPermissions; 
    } catch (PackageManager.NameNotFoundException e) 
     throw new RuntimeException ("This should have never happened.", e); // I'd return null and Log.wtf(...) in production 
} 
Các vấn đề liên quan