zoukankan      html  css  js  c++  java
  • 【起航计划 022】2015 起航计划 Android APIDemo的魔鬼步伐 21 App->Launcher Shortcuts 为某个非主Activity在Home Screen上建立一个快捷方式

    Android 操作系统对于<intent-filter>含有下列属性的Activity会在应用程序管理器(Launcher)显示一项,一般这个Activity对应于某个应用的主Activity。

    <action android:name=”android.intent.action.MAIN” />
    <category android:name=”android.intent.category.LAUNCHER” />

     此外,如果用户想在设备的Home Screen上添加应用的快捷方式,可以在Launcher中长按这个应用的图标,Android系统会自动为该应用在Home Screen上添加一个快捷方式,名称和图标和在Launcher中的一样。

    除了支持指向应用(主Activity)的快捷方式外,Android可以在Home Screen上定义指向Application中任意Activity的快捷方式。

    比如说你的应用中有个功能用户可能会经常使用,比如说地图中查询地址,正常情况下用户需要先启动主Activity,可能需要经过几次菜单选择或是 其它方式才能进到这个功能,用户可能感觉到不方便,这是可以为这个功能在Home Screen建立一个快捷方式,用户按这个快捷方式后会直接进入这个功能界面,即使这个Activity不是主Activity。

    Launcher Shortcuts就是介绍了如何为某个非主Activity在Home Screen上建立一个快捷方式。

    实现这个快捷方式,可以分下面几步来完成:

    1.为需要创建快捷方式的Activity的<intent-filter>添加

    <action android:name=”android.intent.action.CREATE_SHORTCUT” /> 

    ,标识这个Activity可以支持在Home Screen上添加快捷方式。Launcher Shortcuts 是采用的是activity-alias,activity-alias为Target的别名,类似于Activity.

     2.添加相应用户添加快捷方式的代码,一般在Activity的onCreate方法中为Activity安装快捷方式:

    private static final String EXTRA_KEY = "com.example.android.apis.app.LauncherShortcuts";
            // If the intent is a request to create a shortcut, we'll do that and exit
    
            if (Intent.ACTION_CREATE_SHORTCUT.equals(action)) {
                setupShortcut();
                finish();
                return;
            }
        /**
         * This function creates a shortcut and returns it to the caller.  There are actually two 
         * intents that you will send back.
         * 
         * The first intent serves as a container for the shortcut and is returned to the launcher by 
         * setResult().  This intent must contain three fields:
         * 
         * <ul>
         * <li>{@link android.content.Intent#EXTRA_SHORTCUT_INTENT} The shortcut intent.</li>
         * <li>{@link android.content.Intent#EXTRA_SHORTCUT_NAME} The text that will be displayed with
         * the shortcut.</li>
         * <li>{@link android.content.Intent#EXTRA_SHORTCUT_ICON} The shortcut's icon, if provided as a
         * bitmap, <i>or</i> {@link android.content.Intent#EXTRA_SHORTCUT_ICON_RESOURCE} if provided as
         * a drawable resource.</li>
         * </ul>
         * 
         * If you use a simple drawable resource, note that you must wrapper it using
         * {@link android.content.Intent.ShortcutIconResource}, as shown below.  This is required so
         * that the launcher can access resources that are stored in your application's .apk file.  If 
         * you return a bitmap, such as a thumbnail, you can simply put the bitmap into the extras 
         * bundle using {@link android.content.Intent#EXTRA_SHORTCUT_ICON}.
         * 
         * The shortcut intent can be any intent that you wish the launcher to send, when the user 
         * clicks on the shortcut.  Typically this will be {@link android.content.Intent#ACTION_VIEW} 
         * with an appropriate Uri for your content, but any Intent will work here as long as it 
         * triggers the desired action within your Activity.
         */
        private void setupShortcut() {
            // First, set up the shortcut intent.  For this example, we simply create an intent that
            // will bring us directly back to this activity.  A more typical implementation would use a 
            // data Uri in order to display a more specific result, or a custom action in order to 
            // launch a specific operation.
    
            Intent shortcutIntent = new Intent(Intent.ACTION_MAIN);
            shortcutIntent.setClassName(this, this.getClass().getName());
            shortcutIntent.putExtra(EXTRA_KEY, "ApiDemos Provided This Shortcut");
    
            // Then, set up the container intent (the response to the caller)
    
            Intent intent = new Intent();
            intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
            intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.shortcut_name));
            Parcelable iconResource = Intent.ShortcutIconResource.fromContext(
                    this,  R.drawable.app_sample_code);
            intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconResource);
    
            // Now, return the result to the launcher
    
            setResult(RESULT_OK, intent);
        }

    如果用户想为某个Activity创建快捷方式,方法是在Home Screen的空白处长按,这时Android会显示用户可以选择添加的桌面种类列表,选择Shortcut(快捷方式)后,Android会列出所有定 义了android.intent.action.CREATE_SHORTCUT的所有应用:

    此时如果选择ApiDemos,那么Add to Home Screen会启动LauncherShortcuts Activity,发出请求的Intent的action 会设置为Intent.ACTION_CREATE_SHORTCUT,因此可以在onCreate中使用 Intent.ACTION_CREATE_SHORTCUT.equals(action)来判断请求是来自Add to Home Screen还是用户选择App->Launcher Shorts。如果是来自Add to Home Screen,Launcher Shortcuts则为本Activity创建一个快捷方式setupShortcut,然后退出。

    Add to Home Screen 发出Intent请其后(运行startActivityForResult),预期从LauncherShortcuts返回一个结果,这也是为什么 setupShortcut需要返回一个结果。对应创建的快捷方式的Intent至少需要定义三个参数:SHORTCUT_INTENT (value: Intent), SHORTCUT_NAME (value: String),  SHORTCUT_ICON (value: Bitmap)或SHORTCUT_ICON_RESOURCE (value: ShortcutIconResource).

    本例是为当前Activity(LauncherShortcuts)创建快捷方式,实际应用中可以根据需要为别的Activity或是提供一个列表供用户来选择需创建的快捷方式。

    本例在Home Screen创建一个Sample 快捷方式,选择该快捷方式后,直接进入Launcher Shortcuts,而无需从App再进入Launcher Shortcuts。

  • 相关阅读:
    虚拟机环境
    R语言里一些画图程序不能在循环里正常保存的解决办法
    python 图片处理(更新)
    服务器跑代码小tips
    [论文笔记] :Temporal Graph Networks for Deep Learning on Dynamic Graphs
    [论文笔记] Detecting early-warning signals for sudden deterioration of complex diseases by dynamical network biomarkers
    堆和优先队列的写法
    [论文笔记] :Detection for disease tipping points by landscape dynamic network biomarkers
    Computational Physics
    WCSPH实现方法
  • 原文地址:https://www.cnblogs.com/dongdong230/p/4317818.html
Copyright © 2011-2022 走看看