2014-01-24 2 views
0

Android предлагает разработчику объявить разрешение до того, как приложение сможет использовать инструменты или оборудование, я создал класс для хранения каждого разрешения, такого как имя разрешения, красивое имя, описание, как это разрешение. Теперь все равно я могу инициализировать каждый объект программно, получая информацию от http://developer.android.com/reference/android/Manifest.permission.html.Есть ли способ получить информацию о каждом разрешении в android

Код для класса

package org.owasp.seraphimdroid.customclasses; 

public class PermissionData { 
    private String permission; 
    private String permissionName; 
    private String description; 
    private String regularUseDescription; 
    private String maliciousUseDescription; 
    private int weight; 

    public PermissionData(String permission){ 
     this.permission = permission; 
     setData(); 
    } 

    private void setData(){ 
     weight = 0; 
    } 

    //Getters and setter 
    public String getPermissionName() { 
     return permissionName; 
    } 
    public void setPermissionName(String permissionName) { 
     this.permissionName = permissionName; 
    } 
    public int getWeight() { 
     return weight; 
    } 
    public void setWeight(int weight) { 
     this.weight = weight; 
    } 

    public String getPermission() { 
     return permission; 
    } 

    public void setPermission(String permission) { 
     this.permission = permission; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    public String getRegularUseDescription() { 
     return regularUseDescription; 
    } 

    public void setRegularUseDescription(String regularUseDescription) { 
     this.regularUseDescription = regularUseDescription; 
    } 

    public String getMaliciousUseDescription() { 
     return maliciousUseDescription; 
    } 

    public void setMaliciousUseDescription(String maliciousUseDescription) { 
     this.maliciousUseDescription = maliciousUseDescription; 
    } 



} 

Также я должен хранить эти объекты в HashMap или в базе данных? Они будут в основном использоваться для отображения информации в действии в соответствии с разрешением.

ответ

0

Используйте методы Context.check* (методы из объекта Context, начинающиеся с «check») для проверки того, предоставлено ли данное разрешение. См. Пример here.

Обратите внимание, что разрешения не могут быть добавлены во время выполнения.

Простейшие способы хранения данных объектов, о которых я могу думать в данный момент, записывают их в базу данных, сериализуют их в файл или записывают пары ключ-значение в SharedPreferences. Это будет зависеть от того, что вы считаете более подходящим. Хешмап не имеет ничего общего с настойчивостью; вы можете выбрать его как подход для хранения ваших данных в памяти и доступа к нему во время выполнения приложения.

Обучение разработчиков Android имеет раздел на writing key-value pairs and database persistence. Если вы хотите использовать сериализацию, могут оказаться полезными следующие методы:

private void _serializeObject(Object object, String fileName) { 
    String aboluteFilePath = getApplicationContext().getFilesDir().getPath() + File.separator + fileName; 
    try { 

     FileOutputStream fileOut = new FileOutputStream(absoluteFilePath); 
     ObjectOutputStream out = new ObjectOutputStream(fileOut); 
     out.writeObject(object); 
     out.close(); 
     fileOut.close(); 
    } catch (IOException e) { 
     Log.e(TAG, "Error while serializing data to " + absoluteFilePath, e); 
    } 
} 

private Object _deserializeObject(String fileName) { 
    Object object = null; 
    String absoluteFilePath = getApplicationContext().getFilesDir().getPath() + File.separator + fileName; 
    try { 
     FileInputStream fileIn = new FileInputStream(absoluteFilePath); 
     ObjectInputStream in = new ObjectInputStream(fileIn); 
     object = in.readObject(); 
     in.close(); 
     fileIn.close(); 
    } catch (FileNotFoundException e) { 
     // You may want to ignore this exception as it will occur the first time the 
     // data is deserialized unless you make sure serialization occurs before it. 
    } catch (IOException e) { 
     Log.e(TAG, IOException.class.getSimpleName() + " while deserializing from " + absoluteFilePath, e); 
    } catch (ClassNotFoundException e) { 
     Log.e(TAG, ClassNotFoundException.class.getSimpleName() + " while deserializing from " + absoluteFilePath, e); 
    } 

    return object; 
} 
Смежные вопросы