需求:
对于创建快捷方式到桌面,网上能查到不少资料,但一般都是针对应用程序本身的。
前阵子在做项目时,遇到了一个类似于百度贴吧里面的一个需求:对于每个具体的贴吧,都可以将其发送到桌面(HomeScreen)建立快捷方式shortcut。
图标相同,只是图标下面显示的名称为具体贴吧的名称,然后点击此快捷图标则能直接进入到本贴吧中。
实现:1.AndroidManifest中声明权限:
12
2.app_start.xml布局文件:
19 10 14 15 21 22 23 29 30 31
相应的逻辑代码为:
1 package com.qqyumidi.shortcutdemo; 2 3 import android.app.Activity; 4 import android.content.Intent; 5 import android.os.Bundle; 6 import android.view.View; 7 import android.view.View.OnClickListener; 8 import android.widget.Button; 9 10 public class AppStart extends Activity implements OnClickListener {11 12 private Button button1;13 private Button button2;14 15 @Override16 protected void onCreate(Bundle savedInstanceState) {17 super.onCreate(savedInstanceState);18 setContentView(R.layout.app_start);19 20 button1 = (Button) findViewById(R.id.button1);21 button2 = (Button) findViewById(R.id.button2);22 23 button1.setOnClickListener(this);24 button2.setOnClickListener(this);25 26 Intent intent = getIntent();27 if (intent != null) {28 String tName = intent.getStringExtra("tName");29 if (tName != null) {30 Intent redirectIntent = new Intent();31 redirectIntent.setClass(AppStart.this, TiebaActivity.class);32 redirectIntent.putExtra("tName", tName);33 startActivity(redirectIntent);34 }35 }36 }37 38 @Override39 public void onClick(View v) {40 // TODO Auto-generated method stub41 Intent intent = new Intent();42 intent.setClass(AppStart.this, TiebaActivity.class);43 //传参44 switch (v.getId()) {45 case R.id.button1:46 intent.putExtra("tName", "玉米吧");47 break;48 case R.id.button2:49 intent.putExtra("tName", "土豆吧");50 break;51 }52 startActivity(intent);53 }54 }
19 10 14 15 21 22 23
相应的逻辑代码为:
package com.qqyumidi.shortcutdemo;import android.app.Activity;import android.content.Intent;import android.content.Intent.ShortcutIconResource;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.TextView;public class TiebaActivity extends Activity { private TextView textView; private Button button; private String tName; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tieba_activity); Intent intent = getIntent(); tName = intent.getStringExtra("tName"); textView = (TextView) findViewById(R.id.textview1); textView.setText("本贴吧名称: " + tName); button = (Button) findViewById(R.id.button3); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (tName == null) { tName = getString(R.string.app_name); } addShortCut(tName); } }); } private void addShortCut(String tName) { // 安装的Intent Intent shortcut = new Intent("com.android.launcher.action.INSTALL_SHORTCUT"); // 快捷名称 shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, tName); // 快捷图标是允许重复 shortcut.putExtra("duplicate", false); Intent shortcutIntent = new Intent(Intent.ACTION_MAIN); shortcutIntent.putExtra("tName", tName); shortcutIntent.setClassName("com.qqyumidi.shortcutdemo", "com.qqyumidi.shortcutdemo.AppStart"); shortcutIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); shortcut.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent); // 快捷图标 ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext(this, R.drawable.ic_launcher); shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes); // 发送广播 sendBroadcast(shortcut); }}
ShortCut Demo下载地址: