Baby_Bonnie
2013-02-04 03:27
采纳率: 96.4%
浏览 7.8k

Android桌面的快捷方式图标不显示

我想在安卓桌面的某一位置通过代码添加了一个快捷方式,我从远程服务器上下载了图标,然后把这个图标设置成桌面的快捷方式图标。

String url = "http://www.the-brights.net/images/icons/brights_icon_50x50.gif";
    InputStream ins = null;

    try {
        ins = new java.net.URL(url).openStream();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    Bitmap bm = BitmapFactory.decodeStream(new FlushedInputStream(ins));
    String extStorageDirectory = Environment.getExternalStorageDirectory().toString();
    OutputStream outStream = null;

    try {
        outStream = mContext.openFileOutput("test.png", Context.MODE_PRIVATE);
        bm.compress(Bitmap.CompressFormat.PNG, 100, outStream);
        outStream.flush();
        outStream.close();
    }
    catch(Exception e)
    {
        e.printStackTrace();
    }


    Log.i("info", "Got here");
    Bitmap bm2;
    try {
        bm2 = BitmapFactory.decodeStream(mContext.openFileInput("test.png"));
        Log.i("info", bm2.toString());

        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, bm2);
        addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
        mContext.sendBroadcast(addIntent); 
    }
    catch(Exception e) {
        e.printStackTrace();
    }

问题是快捷方式添加上了,但是图标却显示不出来。显示的是默认的快捷方式图标。 错在哪里呢?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • 80后VS烦恼 2013-02-04 04:29
    已采纳

    你的图标应该这样获取:

    BitmapDrawable iconBitmapDrawabel = null;
    try {
                    iconBitmapDrawabel = (BitmapDrawable) getPackageManager().getActivityIcon(newIntent);//getApplicationIcon(app.activityInfo.packageName);
                } catch (NameNotFoundException e) {
                    e.printStackTrace();
                }
    
                addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, iconBitmapDrawabel.getBitmap()); 
    
    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • 问答小助手 2013-02-05 06:52

    用 EXTRA_SHORTCUT_ICON 代替 EXTRA_SHORTCUT_ICON_RESOURCE, 问题就会被解决。

    评论
    解决 无用
    打赏 举报
  • RxRead 2014-11-21 12:10

    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, bm2); 改为
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, bm2);
    使用EXTRA_SHORTCUT_ICON_RESOURCE的话bm2必须为ShortcutIconResource对象。
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, bm2); 改为
    addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, bm2);
    使用EXTRA_SHORTCUT_ICON_RESOURCE的话bm2必须为ShortcutIconResource对象。

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题