文章目录
  1. 1. 通过向launcher发送Broadcast让launcher创建快捷方式
  2. 2. 长按桌面弹出的桌面快捷方式创建
  3. 3. 检测是否已经创建快捷方式
  4. 4. 删除快捷方式
  5. 5. 参考

最近开始重新拾起Android,给自己做了一个手电筒,安装其他应用的时候经常会发现应用会在桌面生成快捷方式,就准备在自己的应用里面也加上这个功能。

桌面是由launcher来控制的,一般有两种方式可以实现:

通过向launcher发送Broadcast让launcher创建快捷方式

  1. 添加权限

    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
    
  2. 实现代码

    private void addShortcut() {
        Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
        //set parameters
        shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getResources().getString(R.string.app_name));
    
        //set the icon of shortcut
        Parcelable icon = Intent.ShortcutIconResource.fromContext(this,R.drawable.icon);
        shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,icon);
    
        //if allows to add repeatedly
        shortcut.putExtra("duplicate", false);
    
        //set the operation when clicking the shortcut
        Intent intent = new Intent(this, this.getClass());
        intent.setAction(Intent.ACTION_MAIN);
        intent.setFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
    
        shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent);
    
        //broadcast
        this.sendBroadcast(shortcut);
    } 
    

长按桌面弹出的桌面快捷方式创建

和第一种有些类似,不过我们不用广播的方式让给launcher创建,而是通过注册IntentFilter,由于“添加快捷方式”Action是 由Launcher通过startActivity-ForResult这一方法发出的,在Activity启动后把初始化的快捷方式 Intent返回给Launcher应用程序,设置结果值为RESULT_OK表示正常返回。

  1. 添加权限

    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
    
  2. 添加IntentFilter

    <intent-filter>
        <action android:name="android.intent.action.CREATE_SHORTCUT" />
    </intent-filter>
    
  3. 实现代码

    public void addShortcut(){             
        Intent addShortCut;     
        //判断是否需要添加快捷方式             
        if(getIntent().getAction().equals(Intent.ACTION_CREATE_SHORTCUT)){                 
            addShortCut = new Intent();                 
            //快捷方式的名称                 
            addShortCut.putExtra(Intent.EXTRA_SHORTCUT_NAME , "我的快捷方式");                 
            //显示的图片                
            Parcelable icon = ShortcutIconResource.fromContext(this, R.drawable.icon);                 
            addShortCut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);     
            //快捷方式激活的activity,需要执行的intent,自己定义                 
            addShortCut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent());                 
            //OK,生成                 
            setResult(RESULT_OK, addShortCut);     
        }else{                 
             //取消                 
            setResult(RESULT_CANCELED);     
        }     
    }  
    

检测是否已经创建快捷方式

使用上面两种方式已经可以在home page上面生成快捷方式,但是上面的代码有一个问题就是,方法调用是放在onCreate()方法中,那么每次打开应用都会创建一个快捷方式,我们需要监测是否已经创建快捷方式。

private boolean isAddShortcut() {
    boolean isInstallShortcut = false;

    final ContentResolver resolver = this.getContentResolver();

    String AUTHORITY = "com.android.launcher.settings";
    final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY
            + "/favorites?notify=false");
    Cursor cursor = resolver.query(CONTENT_URI, new String[]{"title", "iconResource"},
            "title=?",new String[] { getString(R.string.app_name) }, null);

    if (cursor != null && cursor.getCount() > 0) {
        isInstallShortcut = true;
    }

    return isInstallShortcut;
}   

如果要运行上面代码,需要添加权限

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

删除快捷方式

这个我暂时没有测试通过。做法和上面基本一致,也将过程贴出来吧。

  1. 添加权限

    <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
    
  2. 代码

    private void removeShortcut() {
    
        //Deleting shortcut for MainActivity
        //on Home screen
        Intent shortcutIntent = new Intent(getApplicationContext(),
                this.class);
        shortcutIntent.setAction(Intent.ACTION_MAIN);
    
        Intent addIntent = new Intent();
        addIntent
                .putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
        addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
    
        addIntent
                .setAction("com.android.launcher.action.UNINSTALL_SHORTCUT");
        getApplicationContext().sendBroadcast(addIntent);
    }
    

参考

  1. Android Install/Uninstall Shortcut example
文章目录
  1. 1. 通过向launcher发送Broadcast让launcher创建快捷方式
  2. 2. 长按桌面弹出的桌面快捷方式创建
  3. 3. 检测是否已经创建快捷方式
  4. 4. 删除快捷方式
  5. 5. 参考