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

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>

* <uses-permission

* 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 name, int icon) {

ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext(

context, icon);

Intent sc = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");

sc.putExtra(Intent.EXTRA_SHORTCUT_NAME, name); // 快捷方式名

sc.putExtra("duplicate", false); // 不允许重复创建

sc.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes); // 快捷方式图标

sc.putExtra(Intent.EXTRA_SHORTCUT_INTENT, intent); // 启动Intent

context.sendBroadcast(sc);

}

public static final void addShortcut(Context context, Intent intent,

int name, int icon) {

addShortcut(context, intent, context.getString(name), icon);

}

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

Intent intent = new Intent(Intent.ACTION_MAIN);

intent.setClass(this, ActivityWelcome.class);

addShortcut(this, intent, R.string.app_name, R.drawable.ic_launcher);

Intent intent1 = new Intent("MAIN");

intent1.setClass(thisthis.getClass());

addShortcut(this, intent1, R.string.app_name, R.drawable.ic_launcher);

本文由PurpleSword(jzj1993)原创,转载请注明

原文网址 http://blog.csdn.net/jzj1993

时间: 2024-11-01 00:21:55

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

单击事件的处理方式及注册窗体的创建之(四)Intent实现界面跳转传值

跳转开发步骤: 创建Intent对象 ? 设置Intent对象的跳转路径 ? 启动Intent 1 //Register_Activity.java 2 3 case R.id.btnRegister: 4 Intent intent=new Intent(); //创建Intent对象 5 intent.setClass(LoginActivity.this,Register_Activity.class); //设置Intent对象的跳转路径 6 startActivity(intent);

ActivityGroup相关--getLocalActivityManager() 以及intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)用法

ActivityGroup简介 1.ActivityGroup的核心就是继承了该类,能够通过getLocalActivityManager()得到一个LocalActivityManager 如,LocalActivityManager  am= getLocalActivityManager(); 2.然后通过LocalActivityManager通过startActivity(String id, Intent intent),可以与指定的Actiivty绑定,并且返回一个Window.L

Android中为APP创建快捷方式的原理(自己的理解)

我们首先来看Android中为APP创建快捷方式的原理: 从图上可以看出,Android大致分7步完成快捷方式的创建: 第一步:Android系统的launcher程序会调用它的pickShortcut()方法去启动系统的pickActivity程序(应用): 第二步:pickActivity程序(应用)启动后会调用它的CheckIntentFilter()方法,去在系统中寻找可以创建快捷方式的应用有哪些,并且列举出来.只要第三方                     App用<Intent-

android创建快捷方式以及删除快捷方式

/** * * 创建快捷方式 * @param map 快捷方式图标 * @param appName 快捷方式标题 * @param appUrl 快捷方式打开的地址 * @param iconUrl 快捷方式图标地址 * * */ public static void createShortcut(Context activity ,Bitmap map ,String appName ,String appUrl ,String iconUrl){ Intent shortcut = ne

android判断和创建快捷方式(4.03测试通过)

整理了网上的创建方式的代码,对于快捷方式的判断使用系统api获取当前启动器来处理,这样系统定制过或者启动器不一样也没关系 . 一加权限和声明目标activity <!-- 创建快捷方式 --> <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> <uses-permission android:name="com.android.l

[Android Pro] 创建快捷方式,删除快捷方式,查询是否存在快捷方式

1: 创建快捷方式 需要权限: <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />  private static void createShortcut(Context cxt, String shortcutName, int shortcutIconRes, String className, boolean duplicate, boolean lau

Android创建快捷方式图标

一个方法,在APP需要的时候调用该方法即可: public void createShortcutIconInHomeScreen() { Intent addIntent = new Intent(); addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent()); addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "快捷方式名字"); // 不重复创建快捷方式图标. addI

Android 主界面长按创建快捷方式

Android中创建快捷方式主要有两种方式,一是在代码中直接添加生成桌面快捷方式的代码:二是通过小部件添加; 这篇文章主要讲第二种方法! 1.通过在AndroidManifest文件中为Activity添加 <intent-filter> <action android:name="android.intent.action.CREATE_SHORTCUT"/> </intent-filter> 添加之后,长按桌面,小部件中会有你应用的图标出现!这才

Android开启应用时自动创建快捷方式

今天在使用360手机助手时,发现它会自动创建一个快捷启动方式,感觉挺有意思的,所以就上网百度了一些方法,试了一下,有一种方法是挺不错的,我借鉴来用用,先保存下来,我也写了一个测试小程序. 首先,在你要启动应用的mainActivity里添加代码,在onCreate()方法里,加一个方法createShortCut(); 然后就是方法的实现: private void createShortCut() { // TODO Auto-generated method stub //创建快捷方式的In