|
17 | 17 | import java.io.File; |
18 | 18 | import java.security.MessageDigest; |
19 | 19 | import java.security.NoSuchAlgorithmException; |
| 20 | +import java.util.ArrayList; |
20 | 21 | import java.util.List; |
21 | 22 |
|
22 | 23 | /** |
@@ -578,6 +579,80 @@ public static String getAppSignatureSHA1(@NonNull final String packageName) { |
578 | 579 | replaceAll("(?<=[0-9A-F]{2})[0-9A-F]{2}", ":$0"); |
579 | 580 | } |
580 | 581 |
|
| 582 | + /** |
| 583 | + * Return the application's information. |
| 584 | + * <ul> |
| 585 | + * <li>name of package</li> |
| 586 | + * <li>icon</li> |
| 587 | + * <li>name</li> |
| 588 | + * <li>path of package</li> |
| 589 | + * <li>version name</li> |
| 590 | + * <li>version code</li> |
| 591 | + * <li>is system</li> |
| 592 | + * </ul> |
| 593 | + * |
| 594 | + * @return the application's information |
| 595 | + */ |
| 596 | + public static AppInfo getAppInfo() { |
| 597 | + return getAppInfo(Utils.getApp().getPackageName()); |
| 598 | + } |
| 599 | + |
| 600 | + /** |
| 601 | + * Return the application's information. |
| 602 | + * <ul> |
| 603 | + * <li>name of package</li> |
| 604 | + * <li>icon</li> |
| 605 | + * <li>name</li> |
| 606 | + * <li>path of package</li> |
| 607 | + * <li>version name</li> |
| 608 | + * <li>version code</li> |
| 609 | + * <li>is system</li> |
| 610 | + * </ul> |
| 611 | + * |
| 612 | + * @param packageName The name of the package. |
| 613 | + * @return 当前应用的 AppInfo |
| 614 | + */ |
| 615 | + public static AppInfo getAppInfo(final String packageName) { |
| 616 | + try { |
| 617 | + PackageManager pm = Utils.getApp().getPackageManager(); |
| 618 | + PackageInfo pi = pm.getPackageInfo(packageName, 0); |
| 619 | + return getBean(pm, pi); |
| 620 | + } catch (PackageManager.NameNotFoundException e) { |
| 621 | + e.printStackTrace(); |
| 622 | + return null; |
| 623 | + } |
| 624 | + } |
| 625 | + |
| 626 | + /** |
| 627 | + * Return the applications' information. |
| 628 | + * |
| 629 | + * @return the applications' information |
| 630 | + */ |
| 631 | + public static List<AppInfo> getAppsInfo() { |
| 632 | + List<AppInfo> list = new ArrayList<>(); |
| 633 | + PackageManager pm = Utils.getApp().getPackageManager(); |
| 634 | + List<PackageInfo> installedPackages = pm.getInstalledPackages(0); |
| 635 | + for (PackageInfo pi : installedPackages) { |
| 636 | + AppInfo ai = getBean(pm, pi); |
| 637 | + if (ai == null) continue; |
| 638 | + list.add(ai); |
| 639 | + } |
| 640 | + return list; |
| 641 | + } |
| 642 | + |
| 643 | + private static AppInfo getBean(final PackageManager pm, final PackageInfo pi) { |
| 644 | + if (pm == null || pi == null) return null; |
| 645 | + ApplicationInfo ai = pi.applicationInfo; |
| 646 | + String packageName = pi.packageName; |
| 647 | + String name = ai.loadLabel(pm).toString(); |
| 648 | + Drawable icon = ai.loadIcon(pm); |
| 649 | + String packagePath = ai.sourceDir; |
| 650 | + String versionName = pi.versionName; |
| 651 | + int versionCode = pi.versionCode; |
| 652 | + boolean isSystem = (ApplicationInfo.FLAG_SYSTEM & ai.flags) != 0; |
| 653 | + return new AppInfo(packageName, name, icon, packagePath, versionName, versionCode, isSystem); |
| 654 | + } |
| 655 | + |
581 | 656 | private static boolean isFileExists(final File file) { |
582 | 657 | return file != null && file.exists(); |
583 | 658 | } |
@@ -638,4 +713,96 @@ private static String bytes2HexString(final byte[] bytes) { |
638 | 713 | } |
639 | 714 | return new String(ret); |
640 | 715 | } |
| 716 | + |
| 717 | + /** |
| 718 | + * The application's information. |
| 719 | + */ |
| 720 | + public static class AppInfo { |
| 721 | + |
| 722 | + private String packageName; |
| 723 | + private String name; |
| 724 | + private Drawable icon; |
| 725 | + private String packagePath; |
| 726 | + private String versionName; |
| 727 | + private int versionCode; |
| 728 | + private boolean isSystem; |
| 729 | + |
| 730 | + public Drawable getIcon() { |
| 731 | + return icon; |
| 732 | + } |
| 733 | + |
| 734 | + public void setIcon(final Drawable icon) { |
| 735 | + this.icon = icon; |
| 736 | + } |
| 737 | + |
| 738 | + public boolean isSystem() { |
| 739 | + return isSystem; |
| 740 | + } |
| 741 | + |
| 742 | + public void setSystem(final boolean isSystem) { |
| 743 | + this.isSystem = isSystem; |
| 744 | + } |
| 745 | + |
| 746 | + public String getPackageName() { |
| 747 | + return packageName; |
| 748 | + } |
| 749 | + |
| 750 | + public void setPackageName(final String packageName) { |
| 751 | + this.packageName = packageName; |
| 752 | + } |
| 753 | + |
| 754 | + public String getName() { |
| 755 | + return name; |
| 756 | + } |
| 757 | + |
| 758 | + public void setName(final String name) { |
| 759 | + this.name = name; |
| 760 | + } |
| 761 | + |
| 762 | + public String getPackagePath() { |
| 763 | + return packagePath; |
| 764 | + } |
| 765 | + |
| 766 | + public void setPackagePath(final String packagePath) { |
| 767 | + this.packagePath = packagePath; |
| 768 | + } |
| 769 | + |
| 770 | + public int getVersionCode() { |
| 771 | + return versionCode; |
| 772 | + } |
| 773 | + |
| 774 | + public void setVersionCode(final int versionCode) { |
| 775 | + this.versionCode = versionCode; |
| 776 | + } |
| 777 | + |
| 778 | + public String getVersionName() { |
| 779 | + return versionName; |
| 780 | + } |
| 781 | + |
| 782 | + public void setVersionName(final String versionName) { |
| 783 | + this.versionName = versionName; |
| 784 | + } |
| 785 | + |
| 786 | + public AppInfo(String packageName, String name, Drawable icon, String packagePath, |
| 787 | + String versionName, int versionCode, boolean isSystem) { |
| 788 | + this.setName(name); |
| 789 | + this.setIcon(icon); |
| 790 | + this.setPackageName(packageName); |
| 791 | + this.setPackagePath(packagePath); |
| 792 | + this.setVersionName(versionName); |
| 793 | + this.setVersionCode(versionCode); |
| 794 | + this.setSystem(isSystem); |
| 795 | + } |
| 796 | + |
| 797 | + @Override |
| 798 | + public String toString() { |
| 799 | + return "pkg name: " + getPackageName() + |
| 800 | + "\napp icon: " + getIcon() + |
| 801 | + "\napp name: " + getName() + |
| 802 | + "\napp path: " + getPackagePath() + |
| 803 | + "\napp v name: " + getVersionName() + |
| 804 | + "\napp v code: " + getVersionCode() + |
| 805 | + "\nis system: " + isSystem(); |
| 806 | + } |
| 807 | + } |
641 | 808 | } |
0 commit comments