Android 编程下快捷图标的创建
2013-02-12 18:34
351 查看
创建快捷图标的方式
在 Launcher 界面手工添加快捷图标
通过代码向 Launcher 中的广播接收者发送广播来创建快捷图标
创建快捷图标的原理
采用了 Android 系统的广播机制,发送一个广播,Android 系统的 Launcher 中的 InstallShortcutReceiver 在接收到这个广播之后,快捷图标就会被创建。
创建快捷图标的权限
参见:https://github.com/android/platform_packages_apps_launcher/blob/master/AndroidManifest.xml
桌面快捷图标的数据保存在手机的 /data/data/com.android.launcher/databases/launcher.db 中,同时系统对外提供了一个 LauncherProvider 供外界进行访问。在 launcher.db 的 favorites 表中保存了具体的数据,可以通过 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
文件:AndroidManifest.xml
在 Launcher 界面手工添加快捷图标
通过代码向 Launcher 中的广播接收者发送广播来创建快捷图标
创建快捷图标的原理
采用了 Android 系统的广播机制,发送一个广播,Android 系统的 Launcher 中的 InstallShortcutReceiver 在接收到这个广播之后,快捷图标就会被创建。
创建快捷图标的权限
参见:https://github.com/android/platform_packages_apps_launcher/blob/master/AndroidManifest.xml
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/>
桌面快捷图标的数据保存在手机的 /data/data/com.android.launcher/databases/launcher.db 中,同时系统对外提供了一个 LauncherProvider 供外界进行访问。在 launcher.db 的 favorites 表中保存了具体的数据,可以通过 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 配置信息:
<!-- The settings provider contains Home's data, like the workspace favorites --> <provider android:name="LauncherProvider" android:authorities="com.android.launcher.settings" android:writePermission="com.android.launcher.permission.WRITE_SETTINGS" android:readPermission="com.android.launcher.permission.READ_SETTINGS" />
创建快捷图标的实现
文件: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
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.sunzn.cshortcut" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/title_activity_main" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
相关文章推荐
- 【Android进阶】快捷图标的创建与移除
- 创建,删除快捷图标shortcut android .
- Android创建桌面快捷图标
- android 创建快捷图标demo
- Android_创建和删除快捷图标
- android快捷方式图标的创建
- 创建,删除快捷图标shortcut android
- android 创建的删除快捷图标
- 创建,删除快捷图标shortcut android
- Android编程之创建桌面快捷方式
- android 如何创建快捷小图标
- Android创建快捷图标
- Android编程实现创建,删除,判断快捷方式的方法
- Android工具类之创建删除快捷图标
- Android 如何在Launcher桌面创建或者删除快捷图标
- Android 开发之创建桌面快捷图标
- Android 创建快捷方式图标
- Android创建快捷方式图标
- android应用创建桌面快捷图标
- android中在代码中创建应用的快捷图标