当前位置: 首页 > 面试题库 >

带图标的主屏幕快捷方式

劳宇
2023-03-14
问题内容

我试图在Android上以编程方式创建主屏幕快捷方式。到目前为止,我已经能够使用以下代码添加快捷方式本身:

Intent shortcutIntent = new Intent();
    shortcutIntent.setClassName(mContext, mContext.getClass().getName());
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
shortcutIntent.putExtra("someParameter", "HelloWorld 123");
Intent addIntent = new Intent();
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "Shortcut Name 123");
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, R.drawable.icon);
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
mContext.sendBroadcast(addIntent);

但是,快捷方式是使用资源中的默认图标安装的。但是,我想从我的网站中获取图标,并将图标添加到快捷方式。首先,我需要下载此快捷方式。假设我已完成此操作,并且例如该图标位于sdcard上,则无法设置可绘制图标。

如下代码:

try {
        Uri contentURI = Uri.parse("http://mnt/sdcard/mytest/test.png");        
            ContentResolver cr = mContext.getContentResolver();
            InputStream in;

    in = cr.openInputStream(contentURI);
    BitmapFactory.Options options = new BitmapFactory.Options();
        options.inSampleSize=8;
        Bitmap thumb = BitmapFactory.decodeStream(in,null,options);
        Intent shortcutIntent = new Intent();
    shortcutIntent.setClassName(mContext, mContext.getClass().getName());
    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    shortcutIntent.putExtra("someParameter", "HelloWorld 123");
    Intent addIntent = new Intent();
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "Shortcut Name 123");
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, thumb);
    addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
    mContext.sendBroadcast(addIntent);

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

该文件肯定存在,并且我已经使用adb shell进行了验证。此段代码显示以下错误:

10-13 16:11:31.184: WARN/System.err(23273): java.io.FileNotFoundException: No content provider: /mnt/sdcard/mytest/test.png

我究竟做错了什么?

谢谢


问题答案:

您正在尝试从本地资源获取位图(通过使用内容提供程序)。

要从服务器下载位图,您应该遵循以下步骤:

为什么此图像位图无法在Android中下载?



 类似资料:
  • 我试图根据用户输入的坐标捕捉区域截图。基本上,用户在屏幕上点击得到x,y坐标,然后在其他地方点击另一对x,y坐标,然后将其放入一个矩形中,并使用机器人库创建屏幕截图。 我有的问题是,我得到了随机截图,这不是用户输入的坐标,我怎么能考虑包括0的坐标,因为矩形值必须超过1。 以下是我迄今为止的代码:

  • 我的应用程序名称很大,应用程序名称在主屏幕上被截断。有没有办法引用申请的全称?目前应用名称来自Android:label = " @ string/app _ name " 例如。标题为“abcdeghijklmnopqrstuvwxyz”的应用程序将在主屏幕上命名为“abcdeghi...”。所以在主屏幕上保留全名的应用程序快捷方式。

  • 本文向大家介绍ubuntu/deepin制作快捷启动图标的方法,包括了ubuntu/deepin制作快捷启动图标的方法的使用技巧和注意事项,需要的朋友参考一下 默认情况下系统所有的快捷方式放在/usr/share/applications,打开该目录会看到大量的.desktop文件,每个文件便是一个快捷方式。   有时我们需要自己安装软件,然后添加快捷方式。文件的主要结构为:   其中Name是快

  • 在linux机器中,可以通过使用R中的< code>Sys.readlink函数或命令行中的< code>readlink来访问符号链接指向的位置。阅读它的文档,我们发现这不是为Windows快捷方式设计的。 在视窗系统中,我找不到一个行来告诉我文件指向哪里。我最接近的是从这个演示使用的SO问题中得到的。虽然输出并不完美,但我想用一些正则表达式魔法我可以隔离文件路径。 然而,当我尝试时,收到错误消

  • 问题内容: 在VC1(集合视图)中,这是我的prepareforsegue代码: 当我进入VC2(它是TabBarViewController)时,我println()selectedIndexPassing看看返回了什么。它正确返回。然后,在VC2中,我将此调用prepareforsegue转到实际的视图控制器或选项卡栏中的第一个按钮: 但是,当我在VC3(PlayerFromRosterVie

  • 问题内容: 我目前正在使用Android应用程序,因此我以编程方式编写了指向主屏幕的快捷方式。像这样: (实际上是一个StackOverflow帖子向我指出了该解决方案)。 无论如何,当我在模拟器中运行该应用程序时,快捷方式被写到左侧第五页(在2.3主屏幕上)。随后的运行将快捷方式写到主屏幕左侧的第4页。 我的问题是:是否可以将快捷方式写入中心页面或首页(例如传递似乎保存应用程序快捷方式的二维数组