Search code examples
androidactivity-manager

How can I determine permission of Running apps programmatically in android?


I want to see the permission of running apps of android in my software.

For this reason ,I have the following code :

   List<App> apps = new ArrayList<App>();
   ActivityManager am = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE);

   PackageManager packageManager = getPackageManager();

   List<RunningAppProcessInfo> l = am.getRunningAppProcesses();
   Iterator<RunningAppProcessInfo> i = l.iterator();

   PackageManager pm = this.getPackageManager();
   int row_count = 0 ;

   while(i.hasNext()) {
     ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next());
     try 
     {
       CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA));
       App app = new App();
       app.setTitle(c.toString());
       app.setPackageName(l.get(row_count).processName);

       PackageInfo packageInfo =  packageManager.getPackageInfo(l.get(row_count).processName, PackageManager.GET_PERMISSIONS);
       String[] reqPermission= packageInfo.requestedPermissions;
       app.set_Permission_Info(reqPermission);

    //   app.setVersionName(p.versionName);
     //  app.setVersionCode(p.versionCode);
      // CharSequence description = p.applicationInfo.loadDescription(packageManager);
     //  app.setDescription(description != null ? description.toString() : "");
       row_count++;
       // app.setSize(p.s)
       apps.add(app);

     }

     catch(Exception e){}

But there is a problem.

When I run my apps ,I find that the app name and app's package name are not consistent . Why has this problem introduced?

The main problem is described follow:

Let us suppose an apps named "EBOOK_Reader" and "Camera" is running in my device . The package name is "com.a.b" and "com.c.d" respectively. The problem of this code is the appropriate package name is not with appropriate apps name .

It shows the package name Of "com.a.b" to "Camera " and "com.c.d" to "EBOOK_Reader" which is not desired .

Any idea of how can the problem be solved? ThankYou


Solution

  • The app name and app's package name are normally different. You better use the package name as this is unique throughout the device.

    Update: Now I understand your problem. Thanks for clarifying. It is because of the variable row_count. Basically you're are using two different iterator variables. That's why your getting 2 different results. You don't need row_count because you already have interator for i. Try the updated code below:

    Basically l.get(row_count).processName was replaced by info.processName.

    List<App> apps = new ArrayList<App>();
       ActivityManager am = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE);
    
       PackageManager packageManager = getPackageManager();
    
       List<RunningAppProcessInfo> l = am.getRunningAppProcesses();
       Iterator<RunningAppProcessInfo> i = l.iterator();
    
       PackageManager pm = this.getPackageManager();
       // int row_count = 0 ; // no need for this. feel free to delete
    
       while(i.hasNext()) {
         ActivityManager.RunningAppProcessInfo info = (ActivityManager.RunningAppProcessInfo)(i.next());
         try 
         {
           CharSequence c = pm.getApplicationLabel(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA));
           App app = new App();
           app.setTitle(c.toString());
           app.setPackageName(info.processName);
    
           PackageInfo packageInfo =  packageManager.getPackageInfo(info.processName, PackageManager.GET_PERMISSIONS);
           String[] reqPermission= packageInfo.requestedPermissions;
           app.set_Permission_Info(reqPermission);
    
        //   app.setVersionName(p.versionName);
         //  app.setVersionCode(p.versionCode);
          // CharSequence description = p.applicationInfo.loadDescription(packageManager);
         //  app.setDescription(description != null ? description.toString() : "");
           //row_count++; // no need for this. feel free to delete
           // app.setSize(p.s)
           apps.add(app);
    
         }
    
         catch(Exception e){}