Android 编程下快捷图标的创建
創建快捷圖標的方式
- 在 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 配置信息:
<!-- The settings provider contains Home's data, like the workspace favorites --> <providerandroid: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");// 指定快捷圖標激活哪個activityIntent 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-sdkandroid: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"/><applicationandroid:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid: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>?
轉載于:https://www.cnblogs.com/sunzn/archive/2013/02/12/2910350.html
總結
以上是生活随笔為你收集整理的Android 编程下快捷图标的创建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 标准键盘一般分为哪四个键区(键盘分为哪几
- 下一篇: 广发银行积分兑换,可以全用积分不花钱吗