【问题标题】:Get other applications icon using uri使用 uri 获取其他应用程序图标
【发布时间】:2023-03-27 15:35:01
【问题描述】:

我有一个 appwidget,我想在上面显示其他已安装应用程序的启动器图标。我可以使用以下两个代码中的任何一个来获取图标

pkgInfo.applicationInfo.loadIcon(context.getPackageManager());

context.getPackageManager().getApplicationIcon(pkgInfo.packageName);

其中pkgInfoPackageInfo 的实例

一切正常,除了几个应用程序不显示图标并且日志中没有打印错误。根据here 的回答,我们还可以使用 URI 来获取可绘制对象。

我的问题是如果android.resource://[package]/[res type]/[res name] 是URI,那么如何获取[res name]?以及如何从这个 URI 中获取其他应用程序图标的可绘制对象?

提前致谢。

【问题讨论】:

    标签: android icons android-appwidget


    【解决方案1】:

    如果不知道资源名称,也可以通过资源id访问资源:

    android.resource://[package]/[res_id]
    

    应用图标的资源id可以在应用的ApplicationInfo找到:

    ApplicationInfo appInfo = pm.getApplicationInfo(packageName, 0);
    if(appInfo.icon != 0) {
        Uri uri = Uri.parse("android.resource://" + packageName + "/" + appInfo.icon);
    }
    

    【讨论】:

      【解决方案2】:

      问题似乎出在将Drawable 转换为Bitmap 时。由于RemoteViews 没有可与ImageView 一起使用的方法setImageDrawable,因此需要进行转换。进行以下更改解决了问题。

      之前

      Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();

      之后

      Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Config.ARGB_8888);
      Canvas canvas = new Canvas(bitmap); 
      drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
      drawable.draw(canvas);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多