BirthOfTragedy
BirthOfTragedy

Reputation: 103

Programmatically set permissions for event injectors

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

Answers (2)

Nate
Nate

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

user784540
user784540

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

Related Questions