博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 编程下快捷图标的创建
阅读量:6689 次
发布时间:2019-06-25

本文共 3107 字,大约阅读时间需要 10 分钟。

创建快捷图标的方式

  • 在 Launcher 界面手工添加快捷图标
  • 通过代码向 Launcher 中的广播接收者发送广播来创建快捷图标

创建快捷图标的原理

  • 采用了 Android 系统的广播机制,发送一个广播,Android 系统的 Launcher 中的 InstallShortcutReceiver 接收到这个广播之后,快捷图标就会被创建。

创建快捷图标的权限

  • 参见:

桌面快捷图标的数据保存在手机的 /data/data/com.android.launcher/databases/launcher.db 中,同时系统对外提供了一个 LauncherProvider 供外界进行访问。在 launcher.dbfavorites 表中保存了具体的数据,可以通过 LauncherProvider 中的 authorities 加 favorites 的形式来访问 favorites 表;考虑到程序的兼容性 authorities 的值要根据不同的 SDK 版本来进行设置,在 SDK 版本 2.0 之前 authorities 的值为:com.android.launcher.settings,而在 SDK 2.0 之后 authorities 的值为:com.android.launcher2.settings;具体参考不同 SDK 版本下 Laucher 中的 AndroidManifest.xml,本文中仅提供 2.0 版本之前的 LauncherProvider 配置信息:

创建快捷图标的实现

文件:MainActivity

package cn.sunzn.cshortcut;import android.app.Activity;import android.content.ComponentName;import android.content.Intent;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.os.Parcelable;import android.view.Menu;public class MainActivity extends Activity {    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        createShortCut();    }    /**     * 创建快捷图标     */    private void createShortCut() {        // 先判断该快捷是否存在        if (!isExist()) {            Intent intent = new Intent();            // 指定动作名称            intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");            // 指定快捷方式的图标            Parcelable icon = Intent.ShortcutIconResource.fromContext(this, R.drawable.youtube);            intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);            // 指定快捷方式的名称            intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "YouTube");            // 指定快捷图标激活哪个activity            Intent i = new Intent();            i.setAction(Intent.ACTION_MAIN);            i.addCategory(Intent.CATEGORY_LAUNCHER);            ComponentName component = new ComponentName(this, MainActivity.class);            i.setComponent(component);            intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, i);            sendBroadcast(intent);        }    }    /**     * 判断快捷图标是否在数据库中已存在     */    private boolean isExist() {        boolean isExist = false;        int version = getSdkVersion();        Uri uri = null;        if (version < 2.0) {            uri = Uri.parse("content://com.android.launcher.settings/favorites");        } else {            uri = Uri.parse("content://com.android.launcher2.settings/favorites");        }        String selection = " title = ?";        String[] selectionArgs = new String[] { "YouTube" };        Cursor c = getContentResolver().query(uri, null, selection, selectionArgs, null);        if (c != null && c.getCount() > 0) {            isExist = true;        }        if (c != null) {            c.close();        }        return isExist;    }    /**     * 得到当前系统SDK版本     */    private int getSdkVersion() {        return android.os.Build.VERSION.SDK_INT;    }    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.activity_main, menu);        return true;    }}

文件:AndroidManifest.xml

 

转载地址:http://whzoo.baihongyu.com/

你可能感兴趣的文章
ps、firewords在win78中无法直接拖入的问题解决方法
查看>>
android-------非常好的图片加载框架和缓存库(Picasso)
查看>>
Titanium, PhoneGap, Sencha Touch, jQuery Mobile – Clearing up confusion
查看>>
eclipse如何部署Web工程到tomcat中
查看>>
在CentOS7上安装JDK1.8
查看>>
搜索和网页排名的数学原理
查看>>
Xcode项目中同一个名称不同位置 简单修改
查看>>
java设计模式-建造者模式
查看>>
oracle笔记
查看>>
ContentProvider数据更新
查看>>
一些常用RPM Repository(RPM软件仓库)地址
查看>>
Xcode常用插件
查看>>
实体 map 属性
查看>>
php设计模式--适配器模式
查看>>
java中的枚举类 enum使用与分析
查看>>
JAVA 四大域对象总结
查看>>
GIT 常用命令
查看>>
企业级落地容器与DevOps,选用K8S都有哪些“姿势”
查看>>
Android平台播放语音时支持听筒、喇叭之间切换
查看>>
RPC的实现
查看>>