天道酬勤,学无止境

android-package-managers

Android:如何获取已安装活动的列表,因为它们出现在启动器中,没有重复(Android: How to get a list of installed activities, as they appear in launcher, without duplicates)

问题 我正在编写一个应用程序,它允许用户查看已安装应用程序的列表,选择其中一个,然后按计划启动它。 使用来自 stackoverflow 的教程,我设法弄清楚如何获取已安装活动的列表、它们的包名称和图标(即这里 - 几种方法)。 以防万一,这就是我开始活动的方式,它完美无缺,这里没问题: Intent launchIntent = packageManager.getLaunchIntentForPackage(packageName); launchIntent.setAction(Intent.ACTION_MAIN); launchIntent.addCategory(Intent.CATEGORY_LAUNCHER); launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(launchIntent); 问题在于检索已安装的应用程序列表。 我找到了两种获取已安装应用程序列表的方法: 1) 使用 PackageManager pm = getPackageManager(); List<ApplicationInfo> apps = pm.getInstalledApplication(PackageManager.GET_META_DATA) 从apps每个元素中,您可以获得它的包名称和包标签

2021-12-08 19:52:54    分类:技术分享    android   android-activity   android-package-managers

如何在Android中查找已安装的应用程序?(How to find installed applications in Android?)

问题 我想获取安装在 Android 中的第三方应用程序的名称和包名称。 我试过了,但我得到了所有应用程序的名称(第三方和预安装)。 如何识别应用程序是系统应用程序还是其他应用程序? 回答1 这将解决问题......干杯:) PackageManager pm = getPackageManager(); List<PackageInfo> list = pm.getInstalledPackages(0); for (PackageInfo pi : list) { ApplicationInfo ai; try { ai = pm.getApplicationInfo(pi.packageName, 0); System.out.println(">>>>>>packages is<<<<<<<<" + ai.publicSourceDir); // this condition if satisfied means the application currently refered by ai // variable is // a system application if ((ai.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { Log.d(getClass().getSimpleName(), ">>>>>>packages

2021-12-06 14:48:57    分类:技术分享    android   android-package-managers

Android PackageStats 始终为零(Android PackageStats gives always zero)

问题 我正在尝试获取我的应用程序包占用的大小。 每个应用程序在内部/外部存储中都有一个位置。 我想计算以下目录的大小,我该怎么做? 我知道我可以在 Oreo (API 26) 设备上及以上使用 StorageStateManager,但我如何才能在 Oreo 设备之前实现这一点。 应用程序目录: /Android/data/myapplicationpackage 我正在尝试使用 PackageStats,但它总是给我零。 使用此代码的实际方法是什么? 我使用了以下代码,它给我全部为零。 PackageStats stats = new PackageStats(context.getPackageName()); long codeSize = stats.codeSize + stats.externalCodeSize; long dataSize = stats.dataSize + stats.externalDataSize; long cacheSize = stats.cacheSize + stats.externalCacheSize; long appSize = codeSize + dataSize + cacheSize; 回答1 PackageStats stats = new PackageStats(context.getPackageName()

2021-12-03 01:38:35    分类:技术分享    java   android   android-package-managers   android-storage

queryIntentActivityOptions 不起作用(queryIntentActivityOptions not working)

问题 我正在尝试创建一个对话框,显示用户手机中的所有应用程序,可用于从存储中选择图片或使用相机拍摄。 这是对我之前的问题的跟进。 我发现用可以执行上述操作的应用程序在我的自定义对话框中填充我的列表视图的最佳方法是使用queryIntentActivityOptions()方法,但它不起作用。 我的列表视图没有填充可用于访问图像或使用相机拍摄图像的应用程序。 private void acquirePicture(){ Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); photoPickerIntent.setType("image/*"); Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(photoPickerIntent, 1); final Dialog dialog = new Dialog(this); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); WindowManager.LayoutParams WMLP = dialog.getWindow().getAttributes(); WMLP.gravity =

2021-11-30 02:43:29    分类:技术分享    android   android-intent   android-dialog   android-package-managers

如何将 Gradle 依赖项更新到最新版本(How to update Gradle dependencies to their latest version)

问题 有没有一种简单的方法可以让 gradle 将依赖项更新到最新的可用版本? 为了构建可重现性,我的所有依赖项都在我的 build.gradle 文件中用这样的版本号定义: dependencies { compile 'namespace:package1:version' compile 'namespace:package2:version' compile 'namespace:package3:version' } 我想定期将每个包更新到最新版本。 通常,这是我在发布后为新 sprint 做的第一件事。 为每个包手动执行此操作真的很痛苦。 理想情况下,我想要一个命令来为我更新 build.gradle 文件,但至少有一个命令可以打印出哪个包需要更新以及最新版本号是多少。 在 ruby​​ land 我会运行 bundler update。 回答1 这就是我能想出的全部内容。 如果有更少的手动方法,我会很乐意接受另一个答案。 在 Android Studio 中,我将每个依赖版本替换为一个加号示例: compile 'namespace:package1:+' 同步或构建项目,这将导致所有依赖项解析为最新版本。 在 Android Studio 中,将光标放在 build.gradle 中的每个依赖项行上,然后按alt+enter弹出菜单,您可以选择替换为特定版本 回答2

2021-11-29 02:50:02    分类:技术分享    android   android-studio   gradle   android-build   android-package-managers

如何获取所有应用程序(包括系统应用程序)的列表?(How to get list of ALL apps (including System Apps)?)

问题 我正在执行以下操作以获取应用程序列表,并且我只获取已安装的应用程序,而不是所有应用程序,包括系统应用程序。 我尝试了以下方法: packageList1 = getPackageManager().getInstalledPackages(PackageManager.GET_META_DATA); 和这个: packageList1 = getPackageManager().getInstalledPackages(0); 对于这两种情况,我得到的应用程序列表与我在手机上安装的应用程序列表相同。 回答1 通过调用以下命令,您已经获得了所有已安装应用程序的列表,包括系统应用程序: List<ApplicationInfo> apps = getPackageManager().getInstalledPackages(0); 那些有标志的人: ApplicationInfo.FLAG_UPDATED_SYSTEM_APP ApplicationInfo.FLAG_SYSTEM 是系统应用。 您可以像这样检查标志: List<ApplicationInfo> apps = getPackageManager().getInstalledApplications(0); for(ApplicationInfo app : apps) { if((app.flags &

2021-11-28 07:00:22    分类:技术分享    android   android-package-managers   installed-applications

如何启用 Android 下载管理器(How to Enable Android Download Manager)

问题 我正在使用 Android 下载管理器下载文件列表。 最近我看到一个崩溃报告说 Unknown java.lang.IllegalArgumentException: Unknown URL content://downloads/my_downloads 后来,我发现原因是因为用户禁用了Android下载管理器。 我通过使用下面的代码检查它的包名称来检查下载管理器是否被禁用。 int state = this.getPackageManager().getApplicationEnabledSetting("com.android.providers.downloads"); 现在,如果下载管理器被禁用,我需要找到一种方法来启用它。 我尝试使用 Manifest 中的权限设置它的启用状态,但我不断收到安全异常。 this.getPackageManager().setApplicationEnabledSetting("com.android.providers.downloads", PackageManager.COMPONENT_ENABLED_STATE_DEFAULT, 0); <uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>

2021-11-28 00:59:09    分类:技术分享    android   android-package-managers   android-download-manager   android-settings

how to use queryIntentActivityOptions() method

Am trying to create a dialog that shows all applications in a user phone that can be used to select a picture from the storage or take one using the camera. below are my two intents that am planning to use. Intent photoPickerIntent = new Intent(Intent.ACTION_PICK); photoPickerIntent.setType("image/*"); Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); The best way i have found to populate my listview in my customized dialog with applications that can perform the above actions is to use queryIntentActivityOptions() method but am stucked. i have never used it before and i don't

2021-11-27 07:40:10    分类:问答    android   android-intent   android-camera   android-gallery   android-package-managers

第 2 部分由 UI 启动的持久前台 android 服务,也可在睡眠模式下工作,也可在手机重启时启动(part-2 persistent foreGround android service that starts by UI, works at sleep mode too, also starts at phone restart)

问题 Status:非常感谢所有在这里和第 1 部分中提供帮助和指导的人! 我根据研究和提供的帮助编写了代码,并将该工作代码放在 EDIT-1 中。 欢迎批评,使代码更好。 Scenario: 我问了第 1 部分中提到的问题,但由于某种原因,我始终无法使用具有真正集成和健全性的代码来制定设计和正确的策略。 这是一个冗长的问题,问题或答案都不能在一集中结束或完成,所以我将第二部分作为概要。 可能是我无能或只是在阅读如此多分散的文档和不同策略的答案时感到不安,或者答案具有不同的观点/编码风格。 第 1 部分第 1 部分持久性前台 android 服务,由 UI 启动,也可在睡眠模式下工作,也可在手机重启时启动 Question: 这是我想要的,在观察到不同的答案后终于得出结论: 需要每 15 分钟运行一次代码(即使手机处于睡眠状态)。 我认为需要唤醒锁吗? //AT boot, check shared preferences to see boolean "serviceEnabled"? //if true, set alarm manager to run a service every 15 minuts. //if false, do nothing. //On "enable" button clicked. //make "serviceEnabled" boolean

2021-11-26 23:56:23    分类:技术分享    android   android-intent   android-service   alarmmanager   android-package-managers

Package Installer crashes in Android M after requesting permission READ_SMS

I have a Login Fragment that tries to access (TelephonyManager) getActivity().getSystemService(Context.TELEPHONY_SERVICE); this works well with devices up to Lollipop 5.1. And when I tried it in Marshmallow 6.01 it showed security exception. So I added code from android docs to request permission on runtime. Here is the code int permissionCheck = ContextCompat.checkSelfPermission(getActivity(),Manifest.permission.READ_SMS); if (permissionCheck != PackageManager.PERMISSION_GRANTED) { // Should we show an explanation? if (ActivityCompat.shouldShowRequestPermissionRationale(getActivity()

2021-11-25 08:08:34    分类:问答    android   android-permissions   android-6.0-marshmallow   android-package-managers   packageinstaller