2013-10-08 45 views

回答

2

您可以通過下面的代碼

final Intent deviceAdminIntent = new Intent("android.app.action.DEVICE_ADMIN_ENABLED", null); 
final List<ResolveInfo> pkgAppsList = getPackageManager().queryBroadcastReceivers(deviceAdminIntent, 0); 
for (ResolveInfo aResolveInfo : pkgAppsList) { 
    String pkg = aResolveInfo.activityInfo.applicationInfo.packageName; 
     String name = aResolveInfo.activityInfo.applicationInfo.loadLabel(getPackageManager()).toString(); 

    System.out.println("Package :: " + pkg); 
    System.out.println("Name :: " + name); 
} 

找到的應用程序列表中你可以在應用程序的ResolveInfo所有必要的數據。您可以檢查ResolveInfo javadoc here


我寫了返回ComponentName爲相同getActiveAdmins

private List<ComponentName> getAllAdmins(Context mContext) { 
     List<ComponentName> result = new ArrayList<ComponentName>(); 

     // Read all receivers who can listen android.app.action.DEVICE_ADMIN_ENABLED 
     // You can add all other action which can be used for DeviceAdminReceiver 
     final Intent deviceAdminIntent = new Intent("android.app.action.DEVICE_ADMIN_ENABLED", null); 
     final List<ResolveInfo> pkgAppsList = mContext.getPackageManager().queryBroadcastReceivers(deviceAdminIntent, 0); 
     for (ResolveInfo aResolveInfo : pkgAppsList) { 
      // Prepare component and add to list 

      result.add(new ComponentName(aResolveInfo.activityInfo.applicationInfo.packageName, 
        aResolveInfo.activityInfo.name)); 

      //String pkg = aResolveInfo.activityInfo.applicationInfo.packageName; 
      //String name = aResolveInfo.activityInfo.applicationInfo.loadLabel(getPackageManager()).toString(); 
      //System.out.println("Package :: " + pkg); 
      //System.out.println("Name :: " + name); 
     } 
     return result; 
    } 
+0

謝謝:)真的有幫助 – HakunaMatata

+1

@Pankaj Kumar將只返回系統運行的應用程序所有啓用的應用程序我已經找到系統安裝的應用程序,但我只想知道哪個系統應用程序處於活動狀態或哪一個處於非活動狀態? – Erum

1

您可以在以下的Android源DeviceAdminSettings必要的代碼的方法:https://android.googlesource.com/platform/packages/apps/Settings/+/kitkat-release/src/com/android/settings/DeviceAdminSettings.java

DevicePolicyManager mDPM; // = (DevicePolicyManager) getActivity().getSystemService(Context.DEVICE_POLICY_SERVICE); 
final HashSet<ComponentName> mActiveAdmins = new HashSet<ComponentName>(); 
final ArrayList<DeviceAdminInfo> mAvailableAdmins = new ArrayList<DeviceAdminInfo>(); 

... 

    mActiveAdmins.clear(); 
    List<ComponentName> cur = mDPM.getActiveAdmins(); 
    if (cur != null) { 
     for (int i=0; i<cur.size(); i++) { 
      mActiveAdmins.add(cur.get(i)); 
     } 
    } 
    mAvailableAdmins.clear(); 
    List<ResolveInfo> avail = getActivity().getPackageManager().queryBroadcastReceivers(
      new Intent(DeviceAdminReceiver.ACTION_DEVICE_ADMIN_ENABLED), 
      PackageManager.GET_META_DATA | PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS); 
    if (avail == null) { 
     avail = Collections.emptyList(); 
    } 
    // Some admins listed in mActiveAdmins may not have been found by the above query. 
    // We thus add them separately. 
    Set<ComponentName> activeAdminsNotInAvail = new HashSet<ComponentName>(mActiveAdmins); 
    for (ResolveInfo ri : avail) { 
     ComponentName riComponentName = 
       new ComponentName(ri.activityInfo.packageName, ri.activityInfo.name); 
     activeAdminsNotInAvail.remove(riComponentName); 
    } 
    if (!activeAdminsNotInAvail.isEmpty()) { 
     avail = new ArrayList<ResolveInfo>(avail); 
     PackageManager packageManager = getActivity().getPackageManager(); 
     for (ComponentName unlistedActiveAdmin : activeAdminsNotInAvail) { 
      List<ResolveInfo> resolved = packageManager.queryBroadcastReceivers(
        new Intent().setComponent(unlistedActiveAdmin), 
        PackageManager.GET_META_DATA 
          | PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS); 
      if (resolved != null) { 
       avail.addAll(resolved); 
      } 
     } 
    } 
    for (int i = 0, count = avail.size(); i < count; i++) { 
     ResolveInfo ri = avail.get(i); 
     try { 
      DeviceAdminInfo dpi = new DeviceAdminInfo(getActivity(), ri); 
      if (dpi.isVisible() || mActiveAdmins.contains(dpi.getComponent())) { 
       mAvailableAdmins.add(dpi); 
      } 
     } catch (XmlPullParserException e) { 
      Log.w(TAG, "Skipping " + ri.activityInfo, e); 
     } catch (IOException e) { 
      Log.w(TAG, "Skipping " + ri.activityInfo, e); 
     } 
    } 

    getListView().setAdapter(new PolicyListAdapter()); 

這Android是如何在Device Admins選項卡中爲您列出它們的。