Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 517|回复: 0

Android之快捷方式-  Android学习

[复制链接]

该用户从未签到

发表于 2011-10-24 14:35:47 | 显示全部楼层 |阅读模式
Android中,应用程序快捷方式是桌面最基本的组件。用于直接启动应用程序,本文将对应用程序创建进行分析讲解。
创建应用程序快捷方式主要有以下几种:

在launcher的应用程序列表上,长按某一应用程序图标创建快捷方式到桌面
在桌面上长按在弹出框中选择快捷方式->应用程序->将添加快捷方式的程序
通过程序运行时自动创建

下面将对第三种进行详细介绍:
实现思路是:我们都知道我们的桌面都是通过launcher来控制的,所以我们可以通过下面两种方式来实现快捷方式的自动创建:

通过向launcher发送Broadcast让launcher创建快捷方式
为应用程序的组件注册某一个符合特定条件的IntentFilter,然后可以直接在Launcher的桌面添加启动该组件的快捷方式。

下面是这两种创建方式的核心代码:
首先第一种方式: private void createShortCut()



        // 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());

      



       // Then, set up the container intent (the response to the caller)



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

        Parcelable icon = Intent.ShortcutIconResource.fromContext(this,R.drawable.icon);

        intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);

        intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));



        shortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);

//duplicate created

        shortCutIntent.putExtra("duplicate", false);

        sendBroadcast(shortCutIntent);

}
复制代码


运行上述代码,当快捷方式创建成功后,launcher将通过toast的方式提示快捷方式创建成功,其中通过
shortCutIntent.putExtra("duplicate", false);设置不能重复创建,如果快捷方式已经创建则提示快捷方式已经创建,当然这种方式不是很好,因为每次运行程序的时候都会提示快捷方式已经创建。
注意如果要让上述代码能成功运行,我们还需要设置Uses permission
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
复制代码


第二种方式和第一种有些类似,不过我们不用广播的方式让给launcher创建,而是通过注册IntentFilter,由于“添加快捷方式”Action是 由Launcher通过startActivity-ForResult这一方法发出的,在Activity启动后把初始化的快捷方式 Intent返回给Launcher应用程序,设置结果值为RESULT_OK表示正常返回。
主要代码如下:
首先在xml中设置IntentFilter

<intent-filter>

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

</intent-filter>
复制代码创建核心代码:

// Resolve the intent



final Intent intent = getIntent();

final String action = intent.getAction();



// If the intent is a request to create a shortcut, we'll do that and exit



if (Intent.ACTION_CREATE_SHORTCUT.equals(action)) {

// 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());





// Then, set up the container intent (the response to the caller)



Intent intent = new Intent();

Parcelable icon = Intent.ShortcutIconResource.fromContext(this,R.drawable.icon);

intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);

intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));



shortCutIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, icon);

//duplicate created

shortCutIntent.putExtra("duplicate", false);



setResult(RESULT_OK, intent);



}
复制代码


在launcher中我们运行程序就可以将快捷方式创建在桌面上。




通过上述方式可以自动将快捷方式创建到桌面上,但是每次运行程序时都会将快捷方式创建到桌面上,下面我们将通过程序判断快捷方式是否已经创建到桌面上了,基本思路是:由于快捷方式launcher管理的,我们可以通过查看launcher中是否已经有此快捷方式数据,如果有就不在创建。
主要代码如下:
        private boolean shortCutInstalled() {

                boolean isInstallShortcut = false;

                final ContentResolver cr = this.getContentResolver();

                final String AUTHORITY = "com.android.launcher.settings";

                final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY

                                + "/favorites?notify=true");



                Cursor c = cr.query(CONTENT_URI,

                                new String[] { "title", "iconResource" }, "title=?",

                                new String[] { getString(R.string.app_name) }, null);

                if (c != null && c.getCount() > 0) {

                        isInstallShortcut = true;

                }

                return isInstallShortcut;

        }
复制代码如果要进行上述查询操作,需要具有以下权限:

<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"></uses-permission>
复制代码这样通过上述方法就能创建快捷方式到桌面上了。此时我们发现一个问题,通过程序创建的快捷方式不会随着程序卸载而自动删除。

声明:以上内容皆为自己的粗浅认识,难免会有遗漏或者错误的地方,还请大家多多指点和导论。
回复

使用道具 举报

该用户从未签到

发表于 2011-10-24 14:35:50 | 显示全部楼层

Re:Android之快捷方

很不错的帖子
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-11 11:39 , Processed in 0.298695 second(s), 34 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表