Reputation: 103
How do I programmatically set permissions for event injectors? I am trying to answer an incoming call automatically by simulating the 'Send' key. On the simulator the event injector works perfectly, however, when I run the code on the actual device, it fails to work.
Upvotes: 0
Views: 268
Reputation: 31045
Something like this will check for permissions (if your app has already been run, and the user has already accepted permissions), or request them if they haven't yet been accepted. Depending on what else your app does, you might only need to request PERMISSION_INPUT_SIMULATION
. My code below shows some other permissions, too.
/** @return true if the user has accepted permissions requests */
public boolean hasPermissions() {
ApplicationPermissionsManager apm = ApplicationPermissionsManager.getInstance();
ApplicationPermissions original = apm.getApplicationPermissions();
if ((original.getPermission(ApplicationPermissions.PERMISSION_INPUT_SIMULATION) == ApplicationPermissions.VALUE_ALLOW)
&& (original.getPermission(ApplicationPermissions.PERMISSION_DEVICE_SETTINGS) == ApplicationPermissions.VALUE_ALLOW)
&& (original.getPermission(ApplicationPermissions.PERMISSION_CROSS_APPLICATION_COMMUNICATION) == ApplicationPermissions.VALUE_ALLOW)
&& (original.getPermission(ApplicationPermissions.PERMISSION_INTERNET) == ApplicationPermissions.VALUE_ALLOW)
&& (original.getPermission(ApplicationPermissions.PERMISSION_SERVER_NETWORK) == ApplicationPermissions.VALUE_ALLOW))
{
return true;
} else {
return false;
}
}
/** @return true if the user has accepted / granted permissions */
public boolean checkPermissions() {
if (!hasPermissions()) {
ApplicationPermissions permRequest = new ApplicationPermissions();
permRequest.addPermission(ApplicationPermissions.PERMISSION_INPUT_SIMULATION);
permRequest.addPermission(ApplicationPermissions.PERMISSION_DEVICE_SETTINGS);
permRequest.addPermission(ApplicationPermissions.PERMISSION_CROSS_APPLICATION_COMMUNICATION);
permRequest.addPermission(ApplicationPermissions.PERMISSION_INTERNET);
permRequest.addPermission(ApplicationPermissions.PERMISSION_SERVER_NETWORK);
return ApplicationPermissionsManager.getInstance().invokePermissionsRequest(permRequest);
} else {
return true;
}
}
Upvotes: 1
Reputation:
RIM API does not allow to programmatically set a permission. You can only request for permissions, show permission request screen and user has to set permissions manually.
There's no workaround for that and it is a security measure. Otherwise a malicious software may set arbitrary permissions and do anything it wants.
Upvotes: 4