Hello,
I know this has been answered many times in the forums, but I just wanted to know if the next piece of code is a good way to check and change the permissions of my application.
Code:
public static void changeApplicationPermissions() {
try {
Vector vNewPermissions;
for(int i=0; i < 3; i++)
{
vNewPermissions = this.checkApplicationPermissions();
if(vNewPermissions != null)
this.modifyApplicationPermissions(vNewPermissions);
if((vNewPermissions != null) && (i == 2))
{
BBUtilities.launchDialogScreen("MyApplication is not able to work because it doesn't have enough permissions to work correctly." +
"\MyApplication will be closed.");
System.exit(0);
}
else
break;
}
} catch (final MyApplication e1) {
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
Dialog.alert(e1.getMessage());
System.exit(0);
}
});
return;
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public static final Vector checkApplicationPermissions() throws MyApplicationException
{
try
{
ApplicationPermissions permissions = ApplicationPermissionsManager.getInstance().getApplicationPermissions();
Vector permissionsToChange = null;
int[] p;
int i;
p = new int[] { ApplicationPermissions.PERMISSION_AUTHENTICATOR_API,
ApplicationPermissions.PERMISSION_CHANGE_DEVICE_SETTINGS,
ApplicationPermissions.PERMISSION_CODE_MODULE_MANAGEMENT,
ApplicationPermissions.PERMISSION_EMAIL,
ApplicationPermissions.PERMISSION_EVENT_INJECTOR,
ApplicationPermissions.PERMISSION_EXTERNAL_CONNECTIONS,
ApplicationPermissions.PERMISSION_FILE_API,
ApplicationPermissions.PERMISSION_INTERNAL_CONNECTIONS,
ApplicationPermissions.PERMISSION_HANDHELD_KEYSTORE,
ApplicationPermissions.PERMISSION_LOCAL_CONNECTIONS,
ApplicationPermissions.PERMISSION_PHONE
};
for(i = 0; i< p.length; i++)
{
if(permissions.containsPermissionKey(p[i]))
if(permissions.getPermission(p[i]) != ApplicationPermissions.VALUE_ALLOW)
{
if(permissionsToChange == null)
permissionsToChange = new Vector();
permissionsToChange.addElement(new Integer(p[i]));
}
}
return permissionsToChange;
}catch (Exception e) {
throw new MyApplicationException("MyApplication doesn't have enough permissions to work correctly.\MyApplication will be closed."+e.getMessage());
}
}
public static final boolean modifyApplicationPermissions(Vector vNewPermissions) throws MyApplicationException
{
try{
ApplicationPermissions permissions = ApplicationPermissionsManager.getInstance().getApplicationPermissions();
for(int i = 0 ; i < vNewPermissions.size(); i++)
permissions.addPermission(((Integer)vNewPermissions.elementAt(i)).intValue());
return ApplicationPermissionsManager.getInstance().invokePermissionsRequest(permissions);
}catch (Exception e) {
throw new MyApplicationException("MyApplication doesn't have enough permissions to work correctly.\MyApplication will be closed.");
}
}
Do you think is better to change the permissions when the user launches the application than letting the BB prompts the user when a resource without permission is going to be used?
Does someone know which is the best way of doing this? Because I still don't have this clear enough and haven't found info related with it...
Thank you!