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,如需转载请自行联系原作者
目录
相关文章
|
5月前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
134 6
|
5月前
|
Android开发
Android面试之Activity启动流程简述
Android面试之Activity启动流程简述
41 0
|
5月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
Android面试高频知识点(4) 详解Activity的启动流程
48 3
|
5月前
|
缓存 前端开发 Android开发
Android实战之如何截取Activity或者Fragment的内容?
本文首发于公众号“AntDream”,介绍了如何在Android中截取Activity或Fragment的屏幕内容并保存为图片。包括截取整个Activity、特定控件或区域的方法,以及处理包含RecyclerView的复杂情况。
46 3
|
6月前
|
Android开发 开发者
Android面试之Activity启动流程简述
每个Android开发者都熟悉的Activity,但你是否了解它的启动流程呢?本文将带你深入了解。启动流程涉及四个关键角色:Launcher进程、SystemServer的AMS、应用程序的ActivityThread及Zygote进程。核心在于AMS与ActivityThread间的通信。文章详细解析了从Launcher启动Activity的过程,包括通过AIDL获取AMS、Zygote进程启动以及ActivityThread与AMS的通信机制。接着介绍了如何创建Application及Activity的具体步骤。整体流程清晰明了,帮助你更深入理解Activity的工作原理。
112 0
|
6月前
|
消息中间件 Android开发 索引
Android面试高频知识点(4) 详解Activity的启动流程
讲解Activity的启动流程了,Activity的启动流程相对复杂一下,涉及到了Activity中的生命周期方法,涉及到了Android体系的CS模式,涉及到了Android中进程通讯Binder机制等等, 首先介绍一下Activity,这里引用一下Android guide中对Activity的介绍:
94 4
|
7月前
|
XML Android开发 数据格式
android中两个Activity同时设定了intent-filter的category为android.intent.category.LAUNCHER,会发生什么情况?
本文通过案例分析了在Android中当两个Activity都设置了`android.intent.category.LAUNCHER`类别时,会导致它们同时在应用启动器的"所有应用"页面显示为不同的启动入口。
207 2
android中两个Activity同时设定了intent-filter的category为android.intent.category.LAUNCHER,会发生什么情况?
|
7月前
|
开发工具 Android开发
解决Manifest merger failed : android:exported needs to be explicitly specified for <activity>
解决Manifest merger failed : android:exported needs to be explicitly specified for <activity>
180 1
|
8月前
|
XML Android开发 数据格式
Android 中如何设置activity的启动动画,让它像dialog一样从底部往上出来
在 Android 中实现 Activity 的对话框式过渡动画:从底部滑入与从顶部滑出。需定义两个 XML 动画文件 `activity_slide_in.xml` 和 `activity_slide_out.xml`,分别控制 Activity 的进入与退出动画。使用 `overridePendingTransition` 方法在启动 (`startActivity`) 或结束 (`finish`) Activity 时应用这些动画。为了使前 Activity 保持静止,可定义 `no_animation.xml` 并在启动新 Activity 时仅设置新 Activity 的进入动画。
249 12
|
8月前
|
Android开发
Android面试题之Activity的启动模式和flag
Android Activity的四种启动模式:standard(默认,每次启动创建新实例),singleTop(栈顶复用,不走onCreate,调用onNewIntent),singleTask(栈内唯一,清除上方Activity)和singleInstance(单独栈内唯一)。启动模式在AndroidManifest.xml中配置,Intent Flags如FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_SINGLE_TOP可实现类似功能。了解这些对于处理Activity栈管理至关重要。
76 0

热门文章

最新文章