标签: android-package-managers

PackageManager 为所有应用程序抛出 NameNotFoundException,甚至是我自己的应用程序

我正在从 Android 加载所有应用程序,然后将它们显示在我的启动器中(图标+名称)。代码如下:

public class PhoneAppItem
{
    String mPackageName = null;
    String mActivityName = null;

    String mName = null;
    ActivityInfo mActivityInfo = null;

    public PhoneAppItem(String packageName, String activityName)
    {
        mPackageName = packageName;
        mActivityName = activityName;
    }

    public void loadInfo()
    {
        PackageManager pm = MainApp.get().getPackageManager();
        try
        {
            // following line throws the exception!
            mActivityInfo = pm.getActivityInfo(new ComponentName(mPackageName, mActivityName), 0);
            // some other code...
        }
        catch (PackageManager.NameNotFoundException e)
        {
            L.e(e);
            mName = mPackageName;
        }
        catch (NullPointerException e)
        {
            L.e(e);
            mName = mPackageName; …
Run Code Online (Sandbox Code Playgroud)

android android-package-managers

5
推荐指数
1
解决办法
4854
查看次数

如何从 coroutineContext 初始化或访问 packageManager?

我有一个 Jetpack Compose 项目,我只能访问一个coroutineContext对象。context这里没有可用的。

如何访问或初始化 android.content.pm.PackageManager ?

android android-package-managers kotlin-coroutines android-jetpack-compose

5
推荐指数
1
解决办法
1592
查看次数

从PackageManager获取本地化标签名称的方法

PackageManager.getApplicationLabel(ApplicationInfo)用来获取应用程序名称.但是,此名称可能会根据设备区域设置配置和应用程序资源字符串而更改.

所以我想知道是否有任何方便的方法来获取指定的本地化标签(如果不存在则返回null)?如PackageManager.getApplicationLabel(ApplicationInfo info, Locale prefereLocale)

android android-package-managers

4
推荐指数
1
解决办法
2697
查看次数

使用Polaris office 5在外部打开PDF,返回"此文档无法打开"

我们一直试图在过去几个小时内解决这个问题,最后决定我们应该恢复到StackOverflow.

接下来 - 我们有一个应用程序将PDF文件从服务器下载到应用程序的缓存目录,然后使用数据包管理器打开它.当然,它会grantUriPermission()为所有可用的包提供读(和写)权限.

虽然它在大多数设备上运行良好,但今天我们遇到了一个安装了POLARIS Office 5作为默认PDF查看器的设备.

每当我们打开文件时,Polaris只会显示一条消息"无法打开此文档".

我应该说,当试图通过Acrobat Reader打开文件时,它的效果很好.此外,当我们将文件从缓存目录复制到外部目录(使用Android的文件管理器),然后手动在Polaris中打开它时效果很好.

我们已经放弃了它,但由于Polaris是许多设备上的默认查看器,我们真的很想解决这个问题.

这是代码 -

    public void onDownloadDone(String filepath) {
        // Set a file object that represents the downloaded file
        File file = new File(filepath);
        // Set an intent for the external app
        Intent intent = new Intent(Intent.ACTION_VIEW);
        // Get mime type of the downloaded file
        String fileExtension = MimeTypeMap.getFileExtensionFromUrl(filepath);
        String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension);
        intent.setType(mimeType);

        // Look for installed packges according to the file's mime type
        PackageManager pm = context.getPackageManager(); …
Run Code Online (Sandbox Code Playgroud)

android android-package-managers

4
推荐指数
1
解决办法
5585
查看次数

三星禁用软件包

我正在尝试为我的公司创建一个 kiosk 模式应用程序,我需要禁用一些默认包以避免用户访问它。我使用的是 Samsung Knox,它在不执行此代码时看起来运行良好。

名单很大:

// Common packages
packages.add("android.googleSearch.googleSearchWidget");
packages.add("com.LocalFota");
packages.add("com.android.MtpApplication");
packages.add("com.android.backupconfirm");
packages.add("com.android.bluetooth");
packages.add("com.android.browser.provider");
packages.add("com.android.calendar");
packages.add("com.android.certinstaller");
packages.add("com.android.chrome");
packages.add("com.android.dreams.basic");
packages.add("com.android.dreams.phototable");
packages.add("com.android.email");
packages.add("com.android.exchange");
packages.add("com.android.facelock");
packages.add("com.android.htmlviewer");
packages.add("com.android.inputdevices");
packages.add("com.android.keychain");
packages.add("com.android.location.fused");
packages.add("com.android.mms");
packages.add("com.android.musicfx");
packages.add("com.android.nfc");
packages.add("com.android.noisefield");
packages.add("com.android.phasebeam");
packages.add("com.android.sharedstoragebackup");
packages.add("com.android.stk");
packages.add("com.android.vending");
packages.add("com.android.vpndialogs");
packages.add("com.android.wallpaper.livepicker");
packages.add("com.google.android.apps.books");
packages.add("com.google.android.apps.magazines");
packages.add("com.google.android.apps.plus");
packages.add("com.google.android.apps.uploader");
packages.add("com.google.android.backup");
packages.add("com.google.android.configupdater");
packages.add("com.google.android.feedback");
packages.add("com.google.android.gm");
packages.add("com.google.android.gms");
packages.add("com.google.android.googlequicksearchbox");
packages.add("com.google.android.marvin.talkback");
packages.add("com.google.android.music");
packages.add("com.google.android.partnersetup");
packages.add("com.google.android.play.games");
packages.add("com.google.android.setupwizard");
packages.add("com.google.android.street");
packages.add("com.google.android.syncadapters.calendar");
packages.add("com.google.android.syncadapters.contacts");
packages.add("com.google.android.talk");
packages.add("com.google.android.tts");
packages.add("com.google.android.videos");
packages.add("com.google.android.voicesearch");
packages.add("com.google.android.youtube");
packages.add("com.infraware.polarisviewer5");
packages.add("com.lifevibes.trimapp");
packages.add("com.monotype.android.font.chococooky");
packages.add("com.monotype.android.font.cooljazz");
packages.add("com.monotype.android.font.droidserifitalic");
packages.add("com.monotype.android.font.rosemary");
packages.add("com.monotype.android.font.samsungsans");
packages.add("com.qualcomm.privinit");
packages.add("com.qualcomm.timeservice");
packages.add("com.samsung.android.app.assistantmenu");
packages.add("com.samsung.android.app.colorblind");
packages.add("com.samsung.android.app.shareaccessibilitysettings");
packages.add("com.samsung.android.service.travel");
packages.add("com.samsung.android.tripwidget");
packages.add("com.samsung.android.widgetapp.briefing4x2");
packages.add("com.samsung.app.playreadyui");
packages.add("com.samsung.everglades.video");
packages.add("com.samsung.helphub");
packages.add("com.samsung.klmsagent");
packages.add("com.samsung.scrc.idi.server"); …
Run Code Online (Sandbox Code Playgroud)

service android android-package-managers samsung-mobile samsung-knox

4
推荐指数
1
解决办法
9804
查看次数

如何获取访问我的应用程序的内容提供商的应用程序的包名称?

实际上,当任何其他应用程序从我的应用程序共享的内容提供程序中获取数据时,我想要某种广播

android android-contentprovider android-package-managers

4
推荐指数
2
解决办法
2402
查看次数

Android:获取本地化的权限组名称

在marshmallow的运行时权限中,用户可以在权限请求中选择"永不再询问".在这种情况下,我们必须将用户重定向到应用设置,以便让他们启用应用的权限.此外,Android权限是基于组的,在我们将用户发送到设置之前显示应用程序所需的权限组的名称非常方便.

我见过android.Manifest中的字符串,如" android.permission-group.LOCATION ".是否可以通过编程方式获取权限组名称?

android android-manifest android-package-managers android-permissions android-6.0-marshmallow

4
推荐指数
1
解决办法
1257
查看次数

Android PackageStats始终为零

我正在尝试获取应用程序包占用的大小.每个应用程序在内部/外部存储中都有一个位置.

我想计算以下目录的大小,我该怎么做?我知道我可以在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;
Run Code Online (Sandbox Code Playgroud)

java android android-package-managers android-storage

4
推荐指数
1
解决办法
1012
查看次数

List<UsageStats> 返回空

我想获取手机中安装的所有应用程序的日记使用情况,但总是返回一个空列表。下面是我正在使用的代码。

这里app.js来自react-native调用来自本机代码java的应用程序信息

loadApps = async () => {
    await ReturnAppsInformations.getApps()
    .then(response => {
      console.log(response); // only [] <----
      this.setState({ apps });
    })
    .catch(error => {
      console.warn(error);
    });
}
Run Code Online (Sandbox Code Playgroud)

这是我的简单本机代码,用于返回带有数据的数组

UsageStatsManager manager = (UsageStatsManager) this.reactContext.getSystemService(this.reactContext.USAGE_STATS_SERVICE);
List<UsageStats> stats =manager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY,1729196, System.currentTimeMillis());
WritableArray list2 = Arguments.createArray();

for (int i = 0; i < stats.size(); i++) {
    UsageStats usageStats = stats.get(i);
    WritableMap appInfo2 = Arguments.createMap();

    appInfo2.putString("packageName", usageStats.getPackageName());
    appInfo2.putDouble("firsTimeStamp", usageStats.getFirstTimeStamp());
    appInfo2.putDouble("getTotalTimeInForeground", 
    usageStats.getTotalTimeInForeground());
    list2.pushMap(appInfo2);
}
promise.resolve(list2);
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?这是我的第一个应用程序,所以我没有太多知识

  1. 按照 Julien 的建议进行了更新,但仍然导致空数组。

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
            package="com.returnappsinformations" 
            xmlns:tools="http://schemas.android.com/tools">
        <uses-permission
            android:name="android.permission.PACKAGE_USAGE_STATS"
            tools:ignore="ProtectedPermissions" …
    Run Code Online (Sandbox Code Playgroud)

java android android-package-managers react-native

4
推荐指数
1
解决办法
2050
查看次数

Android获取所有已安装应用的列表

我已使用以下代码获取已安装应用的列表:

public List<ResolveInfo>() {
    PackageManager pm=getPackageManager();
    Intent main=new Intent(Intent.ACTION_MAIN, null);

    main.addCategory(Intent.CATEGORY_LAUNCHER);

    List<ResolveInfo> launchables=pm.queryIntentActivities(main, 0);

}
Run Code Online (Sandbox Code Playgroud)

只有一个问题:它只列出具有MAIN活动的应用程序.如何获取所有已安装应用的列表?请注意,我在需要List为ResolveInfo的项目中使用此代码,因此请仅回答返回ResolveInfo列表的代码.

android android-package-managers

3
推荐指数
1
解决办法
1万
查看次数