精华内容
下载资源
问答
  • 通过分析Launcher的生成快捷方式的过程,找出了使用Intent发送请求,Launcher通过自己注册的InstallShortCutReceiver和UnInstallShortCutReceiver实现了快捷方式图标的生成与移除过程。本文主要分析外部apk如何使用...
     
    

    通过分析Launcher的生成快捷方式的过程,找出了使用Intent发送请求,Launcher通过自己注册的InstallShortCutReceiver和UnInstallShortCutReceiver实现了快捷方式图标的生成与移除过程。本文主要分析外部apk如何使用Intent请求生成快捷方式和移除快捷方式图标的问题。

     

    生成快捷方式代码:

     

    Java代码  收藏代码
    1. private static final String ACTION_INSTALL_SHORTCUT =   
    2.     "com.android.launcher.action.INSTALL_SHORTCUT";  
    3.       
    4. /** 
    5.  * 是否可以有多个快捷方式的副本 
    6. */  
    7. static final String EXTRA_SHORTCUT_DUPLICATE = "duplicate";  
    8.   
    9. Intent shortcutIntent = new Intent(ACTION_INSTALL_SHORTCUT);    
    10.         shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME,    
    11.                 getString(R.string.app_name));    
    12.        // 是否可以有多个快捷方式的副本,参数如果是true就可以生成多个快捷方式,如果是false就不会重复添加         
    13.          shortcutIntent.putExtra(EXTRA_SHORTCUT_DUPLICATE, false);    
    14.         Intent intent2 = new Intent(Intent.ACTION_MAIN);    
    15.         intent2.addCategory(Intent.CATEGORY_LAUNCHER);  
    16.   
    17. // 要删除的应用程序的ComponentName,即应用程序包名+activity的名字  
    18.         intent2.setComponent(new ComponentName(this.getPackageName(),    
    19.                 this.getPackageName()+".Main"));    
    20.             
    21.         shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent2);    
    22.         shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,    
    23.                 Intent.ShortcutIconResource.fromContext(this,    
    24.                         R.drawable.icon));    
    25.         sendBroadcast(shortcutIntent);  

     注:Intent intent2 = new Intent(Intent.ACTION_MAIN);  这个也可以换成的构造参数也可以是Intent.ACTION_CREATE_SHORTCUT,也可以生成快捷方式图标,但是这样不标准,在删除的时候如果不和这个对于相同则无法删除。所以还是用Intent.ACTION_MAIN。

     

    那么删除快捷方式的代码是:

    Java代码  收藏代码
    1. private static final String ACTION_UNINSTALL_SHORTCUT =   
    2. "com.android.launcher.action.UNINSTALL_SHORTCUT";  
    3.   
    4.    
    5.   
    6. Intent intent = new Intent(ACTION_UNINSTALL_SHORTCUT );  
    7.   intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, appName);  
    8. // 要删除的应用程序的ComponentName,即应用程序包名+activity的名字  
    9.  ComponentName comp = new ComponentName(info.activityInfo.packageName,  
    10.     info.activityInfo.name);  
    11.   intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent()  
    12.   .setComponent(comp).setAction("android.intent.action.MAIN"));  
    13.   sendBroadcast(intent);  
    14.   
    15.   
    16. 最后要记得加上权限:  
    17. 添加的权限:<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>  
    18. 删除的权限:<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>  
    展开全文
  • 在开发android项目中,遇到一个桌面快捷方式的bug,在部分samsung手机上,app覆盖安装后,以前创建的快捷方式图标和标题变成主程序的图标和标题。 一般创建桌面快捷方式是在应用程序中创建一个Intent,然后以...

    在开发android项目中,遇到一个桌面快捷方式的bug,在部分samsung手机上,app覆盖安装后,以前创建的快捷方式图标和标题变成主程序的图标和标题。

    一般创建桌面快捷方式是在应用程序中创建一个Intent,然后以Broadcast的形式通知Launcher修改数据库创建一个快捷方式,代码如下

        public static final String ACTION_ADD_SHORTCUT = "com.android.launcher.action.INSTALL_SHORTCUT";
        public void createLauncherShortcut() {
    
            Intent shortcut = new Intent(ACTION_ADD_SHORTCUT);
            shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, "标题");
            //设置图标
    //        shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,Intent.ShortcutIconResource.fromContext(getApplicationContext(),
    //                R.mipmap.baidu_shortcut));
            Bitmap icon = BitmapFactory.decodeResource(getResources(), R.mipmap.baidu_shortcut);
            shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON, icon);
    //        // 是否允许重复创建
            shortcut.putExtra("duplicate", false);
    //
    //        //点击快捷方式的操作
            Intent intent = new Intent("com.example.wolf.launchershortcut.action.shortcut");//自定义action
            // 设置启动程序
            shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);
    //        intent.setClass(getApplicationContext(), MainActivity.class);
            intent.setClassName(getApplicationContext(), "com.example.wolf.launchershortcut.MainActivity");
            //广播通知桌面去创建
            getApplicationContext().sendBroadcast(shortcut);
        }


    然后修改AndroidManifest.xml

            <activity
                android:name=".MainActivity"
                android:label="@string/app_name"
                android:theme="@style/AppTheme.NoActionBar">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
                    <category android:name="android.intent.category.LAUNCHER"/>
                </intent-filter>
                <!-- 添加 intent-filter-->
                <intent-filter>
                    <action android:name="com.example.wolf.launchershortcut.action.shortcut"/>
                    <category android:name="android.intent.category.DEFAULT"/>
                </intent-filter>
            </activity>

    快捷方式创建成功后,launcher会提示创建成功.

    如果不自定义action,AndroidManifest.xml可以不用修改。


    Launcher数据库 一般是在/data/data/的launcher包里的launcher.db文件。看里面的favorites表

    itemType:应用程序用0表示,shortcut用1表示,folder用2表示,widget用4表示;
    container:应用程序的容器,-100表示在桌面的程序,-101表示是主屏底部的程序;
    screen:在第几个屏;
    cellX:在屏幕X轴的位置,(0,1,2,3),左上角为0点,往右依次增加;
    cellY:在屏幕Y轴的位置,(0,1,2,3),左上角为0点,往下依次增加;
    spallX:占X轴几个格;
    spallY:占Y轴几个格;
    title:应用程序的名字,有的title为空,表示是widget的快捷方式;
    intent:启动这个图标的intent,当click的时候就会调用这个字段,启动相应的应用程序;
    appWidgetId:-1表示不是widget,数字大于0表示是widget;
    iconType:值为0表示图标的名字被定义为包名的资源id,值为1表示图标用bitmap保存;

    重要的是intent这个字段,内容是

    #Intent;action=android.intent.action.VIEW;component=com.example.wolf.launchershortcut/.MainActivity;end

    component 组件 就是关系到 图标覆盖的元素。component 等于哪个activity,覆盖安装后就会取该activity的图标标题替换快捷方式的图标标题。在其他的大部分Launcher

    里,component 关系到的是删除应用程序后,快捷方式也要删除,没有图标标题的事情,有问题的Launcher与之关联的元素是package,代码是intent.setPackage(getApplicationContext().getPackageName());

    最后决定,Build.MANUFACTURER 为 samsung 的 设置package,其他的设置component,也就是代码里的 intent.setClassName(getApplicationContext(), "com.example.wolf.launchershortcut.MainActivity");

    结果就是 覆盖安装后 图标标题改变的问题解决了,但是又多了个问题,大部分samsung手机删除程序后,快捷图标不能删除。

    如果哪位大神知道更好的方法,麻烦告诉我,谢谢!







    展开全文
  • Android程序开发之手机APP创建桌面快捷方式预览效果图:需要权限:配置文件:AndroidManifest.xmlandroid:name="com.myself.news.activity.GuideActivity"android:label="@string/title_activity_guide" >...

    Android程序开发之手机APP创建桌面快捷方式

    预览效果图:

    需要权限:

    配置文件:AndroidManifest.xml

    android:name="com.myself.news.activity.GuideActivity"

    android:label="@string/title_activity_guide" >

    在应用的闪屏页面Activity的 oncreate方法调用 installShortcut();

    代码:

    // 创建快捷方式

    // com.android.launcher.permission.INSTALL_SHORTCUT

    private void installShortcut() {

    // 判断有没有创建过快捷方式

    boolean isCreated = SharedPreferencesUtils.getBoolean(this,

    GlobalConstantsUtils.PREF_IS_SHORTCUT_INTALLED, false);

    // 判断是否已经创建过

    if (!isCreated) {

    // 发广播

    Intent intent = new Intent();

    intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");

    // 图标

    // 根据资源文件id生成Bitmap对象

    intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, BitmapFactory

    .decodeResource(getResources(), R.drawable.ic_launcher));

    // 名称

    intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "手机安全卫士");

    // 动作

    Intent actionIntent = new Intent();

    // 跳到主页面

    actionIntent.setAction(GlobalConstantsUtils.ACTION_HOME);

    intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, actionIntent);

    sendBroadcast(intent);

    // 标记已经创建过快捷方式,下次不再创建

    SharedPreferencesUtils.setBoolean(this,

    GlobalConstantsUtils.PREF_IS_SHORTCUT_INTALLED, true);

    }

    }

    常量工具类GlobalConstantsUtils:

    public static final String PREF_IS_SHORTCUT_INTALLED = "is_shortcut_intalled";// 是否已经创建快捷方式

    public static final String ACTION_HOME = "com.myself.news.ACTION_HOME";// 跳转到主页面的ACTION

    相关阅读:

    iOS开发中使用SQL语句操作数据库的基本用法指南

    mac双系统时间不一致怎么办 mac双系统时间不一致的原因以及解决方法

    javascript中attribute和property的区别详解

    Windows进程崩溃问题的定位方法

    浅谈setTimeout 与 setInterval

    ASP.NET笔记之CKEditor的使用方法

    win10如何安装卡巴斯基2015安全软件?

    android实现倒计时功能的方法

    腾讯微博提示missing parameter errorcode 102 错误的解决方法

    微软IFA 2015发布会视频回顾 展示Win10 OEM新设备

    最锋利的Visual Studio Web开发工具扩展:Web Essentials使用详解

    iOS应用开发中视图控件UIWindow的基本使用教程

    javascript搜索框效果实现方法

    angularjs的一些优化小技巧

    展开全文
  • Android创建/删除桌面快捷方式

    千次阅读 2019-01-31 16:52:16
    创建桌面快捷方式,老的代码就不贴了,网上一大堆,基本是intent设置各种action。从Android 7.1(API 25)开始,Android新增了ShortcutManager,可以对桌面久按应用图标弹出的快捷方式进行管理,但是API 25上仍然...

    创建桌面快捷方式,老的代码就不贴了,网上一大堆,基本是intent设置各种action。从Android 7.1(API 25)开始,Android新增了ShortcutManager,可以对桌面久按应用图标弹出的快捷方式进行管理,但是API 25上仍然可以使用老的方式添加快捷方式,从API 26开始支持通过ShortcutManager添加快捷方式了。

    为了兼容低版本我们可以使用support提供的方法,support-v4中有一个ShortcutManagerCompat类可以兼容处理,我直接封装了工具类方法:

        /**
         * 添加桌面快捷方式
         * @param context
         * @param className 快捷方式的目标类(全包名的路径)
         * @param id        快捷方式对应的id
         * @param iconResId 快捷方式的图标资源
         * @param labelResId 快捷方式的名称资源
         */
        public static void addShortCutCompat(Context context, String className, String id, int iconResId, int labelResId) {
            Intent shortcutInfoIntent = new Intent();
            shortcutInfoIntent.setClassName(context, className);
            shortcutInfoIntent.setAction(Intent.ACTION_VIEW);
            addShortCutCompat(context, shortcutInfoIntent, id, iconResId, labelResId);
        }
    
        /**
         * 添加桌面快捷方式
         * @param context
         * @param shortcutInfoIntent 点击快捷方式时的启动目标intent
         * @param id        快捷方式对应的id
         * @param iconResId 快捷方式的图标资源
         * @param labelResId 快捷方式的名称资源
         */
        public static void addShortCutCompat(Context context, Intent shortcutInfoIntent, String id, int iconResId, int labelResId) {
            if (ShortcutManagerCompat.isRequestPinShortcutSupported(context)) {
                ShortcutInfoCompat info = new ShortcutInfoCompat.Builder(context, id)
                        .setIcon(IconCompat.createWithResource(context, iconResId))
                        .setShortLabel(context.getResources().getString(labelResId))
                        .setIntent(shortcutInfoIntent)
                        .build();
                //这里第二个参数可以传一个回调,用来接收当快捷方式被创建时的响应
                ShortcutManagerCompat.requestPinShortcut(context, info, null);
            }
        }
    
        /**
         * 删除快捷方式
         * @param context
         * @param shortCutTitle 快捷方式的名称
         * @param className 快捷方式的目标类(全包名的路径)
         */
        public static void deleteShortCut(Context context, String shortCutTitle, String className) {
            Intent shortcutIntent =  new Intent(Intent.ACTION_MAIN);
            shortcutIntent.setComponent(new ComponentName(context.getPackageName(), className));
            Intent intent = new Intent("com.android.launcher.action.UNINSTALL_SHORTCUT");
            intent.putExtra("android.intent.extra.shortcut.NAME", shortCutTitle);
            intent.putExtra("android.intent.extra.shortcut.INTENT", shortcutIntent);
            intent.putExtra("duplicate", true);
            context.sendBroadcast(intent);
        }
    

    ShortcutManagerCompat中我没有找到删除的快捷方式的方法,所以删除还是用老的方式给Intent设置action,但是删除的方法在很多设备上目前都不起作用。。

    调用:
    添加快捷方式

    String className = "com.test.activity.MemoActivity";
    String id = className;
    addShortCutCompat(getContext(), className, id, R.drawable.ic_memo_shortcut, R.string.memo);
    

    删除快捷方式(不起作用)

    String className = "com.test.activity.MemoActivity";
    deleteShortCut(getContext(), getString(R.string.memo), className);
    

    需要添加权限:

     <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
     <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>
    

    如果点击快捷方式启动的是一个Activity, 那么该Activity需要在AndroidManifest.xml中稍加配置:

     <application>
            <activity
                android:name=".activity.MemoActivity"
                android:screenOrientation="portrait">
                <intent-filter>
                    <action android:name="android.intent.action.CREATE_SHORTCUT"/>
                    <category android:name="android.intent.category.DEFAULT"/>
                </intent-filter>
            </activity>
    </application>
    

    如果不加intent-filter中的内容的话,点击快捷方式的时候会报错,提示你要么加一个action为MAIN的intent-filter,要么设置exported为true.

    参考:https://www.jianshu.com/p/18be986553db

    展开全文
  • 手机桌面快捷方式是一种快速启动程序、打开文件或文件夹的方法。如下:快捷方式是应用程序的快速连接。快捷方式的一般扩展名为*.lnk。它是一种快捷方式对经常使用的程序、文件和文件夹非常有用。想想没有快捷方式的...
  • Android应用创建手机桌面快捷方式

    千次阅读 2015-04-14 09:51:33
    /**Android专门提供了Intent.ShortcutIconResource.fromContext来创建快捷方式图标,最后通过setResult来返回*/ Parcelable icon = Intent.ShortcutIconResource.fromContext(MainActivity.this, R.drawable.ic...
  • Android创建桌面快捷方式

    千次阅读 2015-12-29 19:54:44
    Android创建桌面快捷方式 如果我们手机用的是比较原生的Android系统,那么我们安装应用以后,要点击应用页面,才能找到我们的应用,为了方便,我们一般会手动把常用的应用在桌面创建一个快捷方式,这个步骤也可以在...
  • 创建桌面快捷方式

    2014-11-28 09:42:43
    1:权限 ... * 创建桌面快捷方式 */ public void createShut() { // 创建添加快捷方式的Intent Intent addIntent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); St
  • autojs之桌面快捷方式

    2021-03-19 17:43:09
    autojs创建桌面快捷方式, 可配合intent使用 效果展示 原理 shortcutManager.requestPinShortcut 安卓官方文档 https://developer.android.google.cn/reference/kotlin/android/content/pm/ShortcutManager?hl=en ...
  • Android 8.0 创建桌面快捷方式

    千次阅读 2018-08-28 15:36:29
    1. 前言:公司有个给app创建桌面快捷方式的功能。 有一天,测试来说,有款手机,点击快捷方式,无反应。    2.思考:大多数手机是好的,考虑是兼容性问题。 1)经查看,问题机是 华为mate9 8.0系统.(有快捷...
  • android桌面快捷方式的创建与删除

    千次阅读 2014-05-17 18:11:27
    * 创建多个桌面快捷方式 * * @param list */ private void createShortCut(String[] list) { // 安装的Intent Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); ...
  • Android创建和删除桌面快捷方式

    千次阅读 2011-03-18 12:57:00
    * 为程序创建桌面快捷方式 */ private void addShortcut(){ Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); //快捷方式的名称 shortcut.putExtra(Intent.EXTRA_...
  • 如何添加桌面快捷?很多网友都有这个疑问;JS 点击添加网页桌面快捷方式的代码,需要的朋友可以参考下
  • 创建桌面快捷图标

    2015-04-19 16:26:15
    创建桌面快捷图标/** * 创建桌面快捷图标 * 桌面上有一个广播接受者可以接受创建快捷图标的广播和卸载快捷图标的广播 */ *private void installShortCut() {* //一般开发都需要将是否创建过快捷图标的标志存到SP...
  • 标记已经创建过快捷方式,下次不再创建 29 SharedPreferencesUtils.setBoolean( this , 30 GlobalConstantsUtils.PREF_IS_SHORTCUT_INTALLED, true ); 31 } 32 }   常量工具类...
  • 桌面快捷方式 + 桌面动态图标(展示未读信息条数) + 悬浮窗 + 沉浸式状态栏 桌面快捷方式: private void addShortcutToDesktop() { Intent shortcut = new Intent("...); // 不允许重复创建 ...
  • 但作为开发人员,我们有时候并不希望在安装APK完成后生成快捷方式,而是通过先进入某个应用程序,然后在此应用程序中进入另一个应用程序,那么该怎么在安装完APK后不生成桌面快捷方式呢? 打开...
  • android 桌面快捷方式

    2017-04-28 17:27:43
    //桌面快捷方式图标,可动态生成多个不同图标的快捷方式 shortcutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON, R.mipmap.ic_launcher); //桌面快捷方式的动作,点击图标后执行的动作,即设置好的pendingIntent ...
  • Android桌面程序提供了应用添加和删除桌面快捷方式的功能以及判断快捷方式是否存在,只要传入快捷方式标题、图标及点击快捷方式执行的应用Intent即可。代码如下: 1、Android添加桌面快捷方式 ...
  • 在工作中遇到重复创建桌面快捷方式图标BUG,本以为很简单。。确消耗了一下午的时间。其实大部分手机的桌面Authority都不是原生的了。所以需要找到本机的Authority。 ps:如果手机中装有360桌面或者GO桌面的话...
  • 一:主要问题:要删除手机桌面图标只能卸载程序,有时候有些程序在卸载之后,还会残留程序图标在桌面上,死活删不掉,也有些时候,你可能安装了个某个程序,想修改图标名称或隐藏这个程序的桌面图标,那么可以使用...
  • 桌面快捷方式

    2011-12-15 10:57:29
    自己做了一个简单的邮件发送示例,手机...Intent.EXTRA_SHORTCUT_ICON_RESOURCE对应快捷方式执行的图标; Intent.EXTRA_SHORTCUT_INTENT对应快捷方式的事件 android专门提供了Intent.ShortcutResource.fromconten...
  • 可以实现为手机上的某个应用添加桌面快捷方式、移除某个应用到快捷方式 如有问题,请浏览我的博客:http://blog.csdn.net/u011268102/article/details/9335971
  • 在launcher的应用程序列表上,长按某一应用程序图标创建快捷方式桌面桌面上长按在弹出框中选择快捷方式->应用程序->将添加快捷方式的程序 那么能不能在应用安装时自动将应用的快捷入口添加到桌面呢?...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,455
精华内容 2,982
关键字:

如何删除手机桌面快捷方式图标