开发者社区> 长征6号> 正文

Android 发送多个不同的快捷方式(shortcut)到桌面并向其启动的Activity传参

简介:
+关注继续查看

需求:

对于创建快捷方式到桌面,网上能查到不少资料,但一般都是针对应用程序本身的。

前阵子在做项目时,遇到了一个类似于百度贴吧里面的一个需求:对于每个具体的贴吧,都可以将其发送到桌面(HomeScreen)建立快捷方式shortcut。

图标相同,只是图标下面显示的名称为具体贴吧的名称,然后点击此快捷图标则能直接进入到本贴吧中。


实现:

1.AndroidManifest中声明权限:

1 <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
2 <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />

2.app_start.xml布局文件:

复制代码
 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:gravity="center_horizontal"
 6     android:orientation="vertical"
 7     android:paddingBottom="20dp"
 8     android:paddingTop="20dp" >
 9 
10     <TextView
11         android:layout_width="wrap_content"
12         android:layout_height="wrap_content"
13         android:text="这是主activity" />
14 
15     <Button
16         android:id="@+id/button1"
17         android:layout_width="200dp"
18         android:layout_height="wrap_content"
19         android:layout_marginTop="30dp"
20         android:text="进入第一个贴吧" >
21     </Button>
22 
23     <Button
24         android:id="@+id/button2"
25         android:layout_width="200dp"
26         android:layout_height="wrap_content"
27         android:layout_marginTop="15dp"
28         android:text="进入第二个贴吧" >
29     </Button>
30 
31 </LinearLayout>
复制代码

相应的逻辑代码为:

复制代码
 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     @Override
16     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     @Override
39     public void onClick(View v) {
40         // TODO Auto-generated method stub
41         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 }
复制代码


贴吧页tieba_activity.xml布局文件为:

复制代码
 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:gravity="center_horizontal"
 6     android:orientation="vertical"
 7     android:paddingBottom="20dp"
 8     android:paddingTop="20dp" >
 9 
10     <TextView
11         android:id="@+id/textview1"
12         android:layout_width="wrap_content"
13         android:layout_height="wrap_content" />
14 
15     <Button
16         android:id="@+id/button3"
17         android:layout_width="200dp"
18         android:layout_height="wrap_content"
19         android:layout_marginTop="30dp"
20         android:text="生成快捷方式到桌面" >
21     </Button>
22 
23 </LinearLayout>
复制代码

相应的逻辑代码为:

复制代码
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);
    }
}
复制代码


在如上代码中,最主要的部分为addShortCut()函数和AppStart对传入参数的相应处理过程。

ShortCut Demo下载地址:点击下载

 

---------------------------------------------------------------------------------
笔者水平有限,若有错漏,欢迎指正,如果转载以及CV操作,请务必注明出处,谢谢!

本文转自Windstep博客园博客,原文链接:http://www.cnblogs.com/lwbqqyumidi/p/3358310.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
怎么把一个网页设置快捷方式弄到桌面上去
怎么把一个网页设置快捷方式弄到桌面上去
46 0
关于启动Activity之间的及普通按钮的点击事件
两个java文件 对应两个layout 主Activity通过按钮启动副Activity       副Activity通过多个按钮启动主Activity 主Acticity 1 package lianxi; 2 3 import com.
637 0
Android在一个TextView里显示不同样式的字体
在同一个TextView里显示不同样式的字体 public void setSpan(Object what, int start, int end, int flags); 样式1:...
955 0
我要做 Android 第四弹 ps(Q:如何启动其他应用的Activity?)
一、打开第三方应用 (1) Intent intent=new Intent(); //包名 包名+类名(全路径) intent.
1319 0
Android开发学习之使用Toolbar实现不同的Fragment使用不同颜色的标题栏与状态栏
Android开发学习之使用Toolbar实现不同的Fragment使用不同颜色的标题栏与状态栏                                            先看效果图。
2397 0
Android 仿360桌面小人
首先自定义FloatsWindowView,用于显示动画小人。   import android.annotation.SuppressLint; import android.content.
546 0
Android官方开发文档Training系列课程中文版:多样屏幕之支持不同的屏幕尺寸
原文地址:http://android.xsoftlab.net/training/multiscreen/index.html 引言 Android运行于数以百计不同尺寸的设备上。
784 0
[Android]Activity启动过程
Android系统启动加载流程: 参考图 Linux内核加载完毕 启动init进程 init进程fork出zygote进程 zygote进程在ZygoteInit.main()中进行初始化的时候fork出SystemServer进程 SystemServer进程开启的时候初始化Activit...
507 0
Android官方开发文档Training系列课程中文版:通知用户之创建不同导航方式的Activity
原文地址:http://android.xsoftlab.net/training/notify-user/navigation.html 设计通知时要考虑到用户所预想的导航体验。
706 0
+关注
1224
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载