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

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

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

方法二:在应用程序中构建一个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>
 <!--设置wallpapaer的activity -->
<!-- Intent received used to install shortcuts from other applications -->
<receiver
android:name="com.android.launcher2.InstallShortcutReceiver"
android:permission="com.android.launcher.permission.INSTALL_SHORTCUT">
<intent-filter>
<action android:name="com.android.launcher.action.INSTALL_SHORTCUT" />
</intent-filter>
</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>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.studio.android.ch10.ex1"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/ji" android:label="@string/app_name">
<activity android:name=".UrgentCall"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="3" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
</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. }
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Parcelable;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class UrgentCall extends Activity implements
OnClickListener { Button police;
Button fire;
Intent directCall;
private final String ACTION_ADD_SHORTCUT =
"com.android.launcher.action.INSTALL_SHORTCUT"; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); setContentView(R.layout.main); police = (Button)findViewById(R.id.police);
fire = (Button)findViewById(R.id.firepolice); police.setOnClickListener(this);
fire.setOnClickListener(this); directCall = new Intent(Intent.ACTION_CALL);
} @Override
public void onClick(View v) {
Intent addShortcut =
new Intent(ACTION_ADD_SHORTCUT);
String numToDial = null;
Parcelable icon = null;
switch (v.getId()) {
case R.id.police:
numToDial = "110";
icon = Intent.ShortcutIconResource.fromContext(
this,R.drawable.jing);
break;
case R.id.firepolice:
numToDial = "119";
icon = Intent.ShortcutIconResource.fromContext(
this,R.drawable.huo);
break;
default:
break;
}
addShortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,
numToDial);
directCall.setData(Uri.parse("tel://"+numToDial));
addShortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,
directCall);
addShortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
icon);
sendBroadcast(addShortcut);
}
}

方法三:为应用程序组件注册一个符合特定条件的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>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.studio.android.ch10.ex1"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/ji" android:label="@string/app_name">
<activity android:name=".UrgentCall"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.CREATE_SHORTCUT" />
</intent-filter>
</activity>
<activity android:name=".FireShortcut">
<intent-filter>
<action android:name="android.intent.action.CREATE_SHORTCUT" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="3" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
</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. }
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Parcelable; public class FireShortcut extends Activity { @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent addShortcut;
//若是“添加快捷方式”的Action就初始化快捷方式的Intent
if (getIntent().getAction()
.equals(Intent.ACTION_CREATE_SHORTCUT)) { /*初始化添加快捷图标的Intent*/
addShortcut = new Intent();
addShortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME,
"119"); Parcelable icon = Intent.ShortcutIconResource.fromContext(
this,R.drawable.huo);
addShortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
icon); Intent callFirePolice =
new Intent(Intent.ACTION_CALL,Uri.parse("tel://119"));
addShortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT,
callFirePolice); /*设置Result*/
//因为Action是由Launcher通过startActivityForResult这个方法发出的。
setResult(RESULT_OK,addShortcut);
} else {
setResult(RESULT_CANCELED);
}
finish();
}
}

这时列表中会有两个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. JTS(Geometry)(转)

    原文链接:http://blog.csdn.net/cdl2008sky/article/details/7268577 空间数据模型(1).JTS Geometry model (2).ISO Ge ...

  2. iOS:NSBundle的具体介绍

    NSBundle介绍:它是一个单例类,用来加载资源 bundle是一个目录,其中包含了程序会使用到的资源. 这些资源包含了如图像,声音,编译好的代码,nib文件(用户也会把bundle称为plug-i ...

  3. OpenCV学习(38) 人脸识别(3)

                前面我们学习了基于特征脸的人脸识别,现在我们学习一下基于Fisher脸的人脸识别,Fisher人脸识别基于LDA(线性判别算法)算法,算法的详细介绍可以参考下面两篇教程内容: ...

  4. 附4 springboot源码解析-run()

    public ConfigurableApplicationContext run(String... args) { StopWatch stopWatch = new StopWatch(); / ...

  5. 图解Eclipse或者SpringSource Tool Suite 创建模块化Maven项目

    第一步:Package Explorer里选择右键,新建Maven项目,如果没有在Other里找,还没有确认一下是否安装了Maven插件 第二步:在Wizards向导里可以通过搜索,找到Maven P ...

  6. [Angular-Scaled web] 1. Architecture and file structure

    We build a project according to its features or based on simple MVC structure. Put all controller in ...

  7. [AngularJS] Angular 1.3 ngMessages with ngAnimate

    Note: Can use $dirty to check whether user has intracted with the form: https://docs.angularjs.org/a ...

  8. 关于LayoutInflater的错误用法

    转自:http://www.doubleencore.com/2013/05/layout-inflation-as-intended/ Layout inflation is the term us ...

  9. eclipse在search的时候,通过search打开的页面会覆盖之前打开的页面

    eclipse在search的时候,通过search打开的页面会覆盖之前打开的页面,如果不想覆盖的话,可以这么设置: Window->Preferences->General->Se ...

  10. jsp中的js嵌入Extjs与后台action交互

    近期做前台须要和后台交互数据,直接使用js一直没实现.最后使用extjs实现了,extjs代码直接嵌入到jsp的js代码中就可以(0跟jsp里使用extjs一样,须要载入extjs的几个文件) < ...