、在桌面创建快捷方式方法:

方法一:通过长按某一个应用程序的图标在桌面上创建启动该应用程序的快捷方式。

这个方法安装完程序都用户都能实现。

方法二:在应用程序中构建一个Intent,然后以Broadcast的形式通知Launcher创建快捷方式。

先看Launcher的AndroidMainfest.xml文件中InstallShortcutReceiver的注册信息:

  1. <!--设置wallpapaer的activity -->
  2. <!-- Intent received used to install shortcuts from other applications -->
  3. <receiver
  4. android:name="com.android.launcher2.InstallShortcutReceiver"
  5. android:permission="com.android.launcher.permission.INSTALL_SHORTCUT">
  6. <intent-filter>
  7. <action android:name="com.android.launcher.action.INSTALL_SHORTCUT" />
  8. </intent-filter>
  9. </receiver>
  1. <!--设置wallpapaer的activity -->
  2. <!-- Intent received used to install shortcuts from other applications -->
  3. <receiver
  4. android:name="com.android.launcher2.InstallShortcutReceiver"
  5. android:permission="com.android.launcher.permission.INSTALL_SHORTCUT">
  6. <intent-filter>
  7. <action android:name="com.android.launcher.action.INSTALL_SHORTCUT" />
  8. </intent-filter>
  9. </receiver>

所以向这个BroadcastReceiver发送广播,首先应用程序必须要 有com.android.launcher.permission.INSTALL_SHORTCUT权限,然后广播去的Intent的action设置为

com.android.launcher.action.INSTALL_SHORTCUT。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.studio.android.ch10.ex1"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <application android:icon="@drawable/ji" android:label="@string/app_name">
  7. <activity android:name=".UrgentCall"
  8. android:label="@string/app_name">
  9. <intent-filter>
  10. <action android:name="android.intent.action.MAIN" />
  11. <category android:name="android.intent.category.LAUNCHER" />
  12. </intent-filter>
  13. </activity>
  14. </application>
  15. <uses-sdk android:minSdkVersion="3" />
  16. <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
  17. </manifest>
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.studio.android.ch10.ex1"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <application android:icon="@drawable/ji" android:label="@string/app_name">
  7. <activity android:name=".UrgentCall"
  8. android:label="@string/app_name">
  9. <intent-filter>
  10. <action android:name="android.intent.action.MAIN" />
  11. <category android:name="android.intent.category.LAUNCHER" />
  12. </intent-filter>
  13. </activity>
  14. </application>
  15. <uses-sdk android:minSdkVersion="3" />
  16. <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
  17. </manifest>

  1. import android.app.Activity;
  2. import android.content.Intent;
  3. import android.net.Uri;
  4. import android.os.Bundle;
  5. import android.os.Parcelable;
  6. import android.view.View;
  7. import android.view.View.OnClickListener;
  8. import android.widget.Button;
  9. public class UrgentCall extends Activity implements
  10. OnClickListener {
  11. Button police;
  12. Button fire;
  13. Intent directCall;
  14. private final String ACTION_ADD_SHORTCUT =
  15. "com.android.launcher.action.INSTALL_SHORTCUT";
  16. @Override
  17. public void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.main);
  20. police = (Button)findViewById(R.id.police);
  21. fire = (Button)findViewById(R.id.firepolice);
  22. police.setOnClickListener(this);
  23. fire.setOnClickListener(this);
  24. directCall = new Intent(Intent.ACTION_CALL);
  25. }
  26. @Override
  27. public void onClick(View v) {
  28. Intent addShortcut =
  29. new Intent(ACTION_ADD_SHORTCUT);
  30. String numToDial = null;
  31. Parcelable icon = null;
  32. switch (v.getId()) {
  33. case R.id.police:
  34. numToDial = "110";
  35. icon = Intent.ShortcutIconResource.fromContext(
  36. this,R.drawable.jing);
  37. break;
  38. case R.id.firepolice:
  39. numToDial = "119";
  40. icon = Intent.ShortcutIconResource.fromContext(
  41. this,R.drawable.huo);
  42. break;
  43. default:
  44. break;
  45. }
  46. addShortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,
  47. numToDial);
  48. directCall.setData(Uri.parse("tel://"+numToDial));
  49. addShortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,
  50. directCall);
  51. addShortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
  52. icon);
  53. sendBroadcast(addShortcut);
  54. }
  55. }
  1. import android.app.Activity;
  2. import android.content.Intent;
  3. import android.net.Uri;
  4. import android.os.Bundle;
  5. import android.os.Parcelable;
  6. import android.view.View;
  7. import android.view.View.OnClickListener;
  8. import android.widget.Button;
  9.  
  10. public class UrgentCall extends Activity implements
  11. OnClickListener {
  12.  
  13. Button police;
  14. Button fire;
  15. Intent directCall;
  16. private final String ACTION_ADD_SHORTCUT =
  17. "com.android.launcher.action.INSTALL_SHORTCUT";
  18.  
  19. @Override
  20. public void onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22.  
  23. setContentView(R.layout.main);
  24.  
  25. police = (Button)findViewById(R.id.police);
  26. fire = (Button)findViewById(R.id.firepolice);
  27.  
  28. police.setOnClickListener(this);
  29. fire.setOnClickListener(this);
  30.  
  31. directCall = new Intent(Intent.ACTION_CALL);
  32. }
  33.  
  34. @Override
  35. public void onClick(View v) {
  36. Intent addShortcut =
  37. new Intent(ACTION_ADD_SHORTCUT);
  38. String numToDial = null;
  39. Parcelable icon = null;
  40. switch (v.getId()) {
  41. case R.id.police:
  42. numToDial = "110";
  43. icon = Intent.ShortcutIconResource.fromContext(
  44. this,R.drawable.jing);
  45. break;
  46. case R.id.firepolice:
  47. numToDial = "119";
  48. icon = Intent.ShortcutIconResource.fromContext(
  49. this,R.drawable.huo);
  50. break;
  51. default:
  52. break;
  53. }
  54. addShortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,
  55. numToDial);
  56. directCall.setData(Uri.parse("tel://"+numToDial));
  57. addShortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,
  58. directCall);
  59. addShortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
  60. icon);
  61. sendBroadcast(addShortcut);
  62. }
  63. }

方法三:为应用程序组件注册一个符合特定条件的IntentFilter,然后就可以直接在Launcher的桌面上添加启动该组件的快捷方式了。

当我们在Home应用程序Launcher的桌面空白处长按触摸时,会出现一个对话框,提示选择要添加的桌面组件。当我们想把添加的快捷方式的Activity添加进这列时,只需要在这个Activity注册时添加一个Action为android.intent.action.CREATE_SHORTCUT的IntentFilter就可以。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.studio.android.ch10.ex1"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <application android:icon="@drawable/ji" android:label="@string/app_name">
  7. <activity android:name=".UrgentCall"
  8. android:label="@string/app_name">
  9. <intent-filter>
  10. <action android:name="android.intent.action.MAIN" />
  11. <category android:name="android.intent.category.LAUNCHER" />
  12. </intent-filter>
  13. <intent-filter>
  14. <action android:name="android.intent.action.CREATE_SHORTCUT" />
  15. </intent-filter>
  16. </activity>
  17. <activity android:name=".FireShortcut">
  18. <intent-filter>
  19. <action android:name="android.intent.action.CREATE_SHORTCUT" />
  20. </intent-filter>
  21. </activity>
  22. </application>
  23. <uses-sdk android:minSdkVersion="3" />
  24. <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
  25. </manifest>
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.studio.android.ch10.ex1"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <application android:icon="@drawable/ji" android:label="@string/app_name">
  7. <activity android:name=".UrgentCall"
  8. android:label="@string/app_name">
  9. <intent-filter>
  10. <action android:name="android.intent.action.MAIN" />
  11. <category android:name="android.intent.category.LAUNCHER" />
  12. </intent-filter>
  13. <intent-filter>
  14. <action android:name="android.intent.action.CREATE_SHORTCUT" />
  15. </intent-filter>
  16. </activity>
  17. <activity android:name=".FireShortcut">
  18. <intent-filter>
  19. <action android:name="android.intent.action.CREATE_SHORTCUT" />
  20. </intent-filter>
  21. </activity>
  22. </application>
  23. <uses-sdk android:minSdkVersion="3" />
  24. <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
  25. </manifest>
  1. import android.app.Activity;
  2. import android.content.Intent;
  3. import android.net.Uri;
  4. import android.os.Bundle;
  5. import android.os.Parcelable;
  6. public class FireShortcut extends Activity {
  7. @Override
  8. public void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. Intent addShortcut;
  11. //若是“添加快捷方式”的Action就初始化快捷方式的Intent
  12. if (getIntent().getAction()
  13. .equals(Intent.ACTION_CREATE_SHORTCUT)) {
  14. /*初始化添加快捷图标的Intent*/
  15. addShortcut = new Intent();
  16. addShortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,
  17. "119");
  18. Parcelable icon = Intent.ShortcutIconResource.fromContext(
  19. this,R.drawable.huo);
  20. addShortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
  21. icon);
  22. Intent callFirePolice =
  23. new Intent(Intent.ACTION_CALL,Uri.parse("tel://119"));
  24. addShortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,
  25. callFirePolice);
  26. /*设置Result*/
  27. //因为Action是由Launcher通过startActivityForResult这个方法发出的。
  28. setResult(RESULT_OK,addShortcut);
  29. } else {
  30. setResult(RESULT_CANCELED);
  31. }
  32. finish();
  33. }
  34. }
  1. import android.app.Activity;
  2. import android.content.Intent;
  3. import android.net.Uri;
  4. import android.os.Bundle;
  5. import android.os.Parcelable;
  6.  
  7. public class FireShortcut extends Activity {
  8.  
  9. @Override
  10. public void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. Intent addShortcut;
  13. //若是“添加快捷方式”的Action就初始化快捷方式的Intent
  14. if (getIntent().getAction()
  15. .equals(Intent.ACTION_CREATE_SHORTCUT)) {
  16.  
  17. /*初始化添加快捷图标的Intent*/
  18. addShortcut = new Intent();
  19. addShortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,
  20. "119");
  21.  
  22. Parcelable icon = Intent.ShortcutIconResource.fromContext(
  23. this,R.drawable.huo);
  24. addShortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
  25. icon);
  26.  
  27. Intent callFirePolice =
  28. new Intent(Intent.ACTION_CALL,Uri.parse("tel://119"));
  29. addShortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,
  30. callFirePolice);
  31.  
  32. /*设置Result*/
  33. //因为Action是由Launcher通过startActivityForResult这个方法发出的。
  34. setResult(RESULT_OK,addShortcut);
  35. } else {
  36. setResult(RESULT_CANCELED);
  37. }
  38. finish();
  39. }
  40. }

这时列表中会有两个UrgentCall的选项,第二个就直接在桌面添加“拨打火警119”的快捷方式了。

android 添加桌面快捷方式的更多相关文章

  1. Android 添加桌面快捷方式操作

    /** * 为程序创建桌面快捷方式 */ private void addShortcut(){ Intent shortcut = new Intent(“com.android.launcher. ...

  2. Android添加桌面快捷方式的简单实现

    核心代码如下: Button bn = (Button) findViewById(R.id.bn); // 为按钮的单击事件添加监听器 bn.setOnClickListener(new OnCli ...

  3. kailli添加桌面快捷方式

    kailli添加桌面快捷方式 /usr/share/applications/xxx.desktop 注意大小写要与Name对应 [Desktop Entry] Version=1.0 Name=Tu ...

  4. Android -- 创建桌面快捷方式

    代码                                                                                    /** * * 返回添加到桌 ...

  5. (转)Android创建桌面快捷方式两种方法

    [IT168技术]Android在桌面上生成快捷方式有两种情况,一种是直接在桌面直接生成;一种是长按桌面,在弹出的快捷菜单中生成. 谈谈在桌面上直接生成.个人觉得这个比较爽快,既然都是快捷方式了干嘛还 ...

  6. Android创建桌面快捷方式

    在桌面上创建特定界面的快捷入口,icon和title根据请求参数命名.在网上收集的一些相关资 料,在使用intent发送广播的时候,一些型号的收集会有问题,如魅族MX,红米,以及华为,使用setCla ...

  7. Android 通过程序添加桌面快捷方式

    原理:通过代码向 Launcher 中的广播接收者发送广播来创建快捷图标. 首先要声明的权限是: <!--添加图标的权限--> <uses-permission android:na ...

  8. Android中为你的应用程序添加桌面快捷方式

    public void ShortCut(View view){ createDeskShortCut(this,getString(R.string.short_cut),R.drawable.up ...

  9. android添加桌面悬浮窗

    1. 添加权限 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 2. ...

随机推荐

  1. tyvj P2018 「Nescafé26」小猫爬山 解题报告

    P2018 「Nescafé26」小猫爬山 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经 ...

  2. Web系统自己主动化部署脚本

    Web开发的项目,除了在本地直接执行外,还可能常常须要在server上部署. 写了个自己主动化部署的脚本,仅供參考. 不少地方须要配置路径.个人建议使用绝对路径,不用依赖执行脚本时所在的路径. #!/ ...

  3. java web中servlet、jsp、html 互相访问的路径问题

    java web中servlet.jsp.html 互相访问的路径问题 在java web种经常出现 404找不到网页的错误,究其原因,一般是访问的路径不对. java web中的路径使用按我的分法可 ...

  4. libcurl使用easy模式阻塞卡死等问题的完美解决---超时设置

    libcurl使用时疑难问题: 在使用libcurl时, jwisp发现, curl_easy_perform是阻塞的方式进行下载的, curl_easy_perform执行后,程序会在这里阻塞等待下 ...

  5. linux中sort命令

    功能说明:将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序. 参 数: -b 忽略每行前面开始出的空格字符. -c 检查文件是否已经按照顺序排序. -d 排序时,处理英文字母.数 ...

  6. 关于NLPIR应用在KETTLE中的探索

    一:什么是NLPIR? NLPIR汉语分词系统(自然语言处理与信息检索共享平台),主要功能包括中文分词:词性标注:命名实体识别:用户词典功能:支持GBK编码.UTF8编码.BIG5编码.新增微博分词. ...

  7. 设置网站expires和max-age属性

    转:http://www.zicheng.net/article/982022.htm 在使用百度站长工具测试网站优化建议时,在 设置静态内容缓存时间 栏目里,会提示 类似 FAILED - (未设置 ...

  8. IStat Menus 5.02 5.03 的注册码

    1574-5977-7956-8062-0000 6015-5448-3282-4975-0000 9665-5955-6856-2071-0000 2447-9517-7939-5221-0000

  9. 在Foreda上安装apache-tomcat-7.0.42.tar.gz

    开发环境JDK和Tomcat应该和部署环境一致,要不容易出现奇奇怪怪的问题.所以Aspire机器上的Tomcat要装一个新版本了. 装Tomcat基本等于一个解压和移动的过程,确实简单. 第一步:解压 ...

  10. sqoop安装部署(笔记)

    sqoop是一个把关系型数据库数据抽向hadoop的工具.同时,也支持将hive.pig等查询的结果导入关系型数据库中存储.由于,笔者部署的hadoop版本是2.2.0,所以sqoop的版本是:sqo ...