您的浏览器不支持CSS3,建议使用Firfox、Chrome等浏览器,以取得最佳显示效果

安卓创建快捷方式相关问题 Intent Intent-filter

Android 426℃ 0 4年前 (2014-10-19)

Intent

在安卓中,Activity启动时通常需要Intent参数。Intent参数中包含以下几个常用的属性:

Component,指定了要启动的Activity,以及启动的context,使用Intent.setClass或Intent.setComponent方法可以设置

Action属性,可用Intent.setAction方法设置;
Category属性,可用Intent.addCategory方法添加,Action和Category属性一般用于做过滤;

Extra属性,用于传入一些参数,可通过Intent.putExtra方法添加。在Activity被启动后可以通过getIntent.getExtra获取Extra参数。

Manifest

安卓Activity有一个intent-filter属性,用于过滤启动启动此Activity所使用的Intent,不满足条件的Intent无法启动这个Activity,也就是Intent的Action和Category属性了。

最常见的用法,就是主启动Activity一般这么写:
        <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>  


给Activity设置intent-filter.action属性,则该Activity可以作为应用程序入口,被其他程序调用(比如Launcher启动器)。可以有多个action,只要Intent具有其中的一个action就可以启动Activity。如:
<action android:name=“voice” />

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


在Activity的intent-filter.category属性中添加LAUNCHER值,则此Activity可以出现在Launcher中,也就是手机应用程序主菜单中。
<category android:name=“android.intent.category.LAUNCHER” />

如果设置了action但没有对category属性添加LAUNCHER,会出现下述警告,表明Activity暴漏在外面,可被外部的非Launcher程序调用,可能会有安全性问题。
Exported activity does not require permission

此时设置android:exported=”false”则警告会消失。这是,这个Activity只能在本应用内部被调用。因此,指向具有这一属性的Activity的快捷方式被点击时,Launcher无法调用Activity,于是会显示应用程序不存在。

android:exported=“false”  


同一个App可以有多个Activity具有action.MAIN属性,Launcher会自动选择一个作为程序入口。

        <!– 欢迎界面 –>
        <activity
            android:name=“.ui.ActivityWelcome”
            android:theme=“@android:style/Theme.Light.NoTitleBar.Fullscreen” >
            <intent-filter>
                <action android:name=“android.intent.action.MAIN” />
                <category android:name=“android.intent.category.LAUNCHER” />
            </intent-filter>
        </activity>
        <!– 主界面 –>
        <activity android:name=“.ui.ActivityMain” >
            <intent-filter>
                <action android:name=“MAIN” />
                <category android:name=“android.intent.category.LAUNCHER” />
            </intent-filter>
        </activity>

代码添加快捷方式的方法


    /**
     * 创建快捷方式
     * <p>
     * 需要权限
     * <p>
     * <usespermission
     * android:name=”com.android.launcher.permission.INSTALL_SHORTCUT” />
     * <p>
     * 
     * @param context
     *            Context
     * @param intent
     *            要启动的Intent
     * @param name
     *            快捷方式名
     * @param icon
     *            快捷方式图标
     */
    public static final void addShortcut(Context context, Intent intent,
            String nameint icon) {
        ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext(
                contexticon);
        Intent sc = new Intent(“com.android.launcher.action.INSTALL_SHORTCUT”);
        sc.putExtra(Intent.EXTRA_SHORTCUT_NAMEname); // 快捷方式名
        sc.putExtra(“duplicate”false); // 不允许重复创建
        sc.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCEiconRes); // 快捷方式图标
        sc.putExtra(Intent.EXTRA_SHORTCUT_INTENTintent); // 启动Intent
        context.sendBroadcast(sc);

    }  

    public static final void addShortcut(Context context, Intent intent,
            int nameint icon) {
        addShortcut(contextintentcontext.getString(name), icon);

    } 

 

通过给Intent设置不同的Component、Action等,即可从Launcher启动相应Activity,并可传入Extra参数,这样可以实现一些诸如一键截屏,快捷启动之类的功能。


    Intent intent = new Intent(Intent.ACTION_MAIN);

    intent.setClass(this, ActivityWelcome.class);

    addShortcut(thisintent, R.string.app_nameR.drawable.ic_launcher);

    Intent intent1 = new Intent(“MAIN”);

    intent1.setClass(thisthis.getClass());

    addShortcut(thisintent1, R.string.app_nameR.drawable.ic_launcher);



最后,欢迎扫码关注微信公众号。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

0

暂无评论

评论前:需填写以下信息,或 登录

用户登录

忘记密码?