zoukankan      html  css  js  c++  java
  • Android 创建桌面快捷方式研究

    创建快捷方式本来是很简单的一件事件,代码网上一搜一大堆,但是你用后细心研究一下就会发现一个问题:

    不是回到你返回桌面时正在运行的那个 Activity 而是重新运行了你应用的第一个 Activity ,

    这样显然是不可以的,网上苦苦搜寻半天千篇一律都没解决办法,于是研究 Logcat 

    首先从 Launcher 点击图标系统发出的 Intent 如下:

    I/ActivityManager(564): START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.freesky.sdkproxytestbed/.MainActivity} from pid 29805

    再看看从自己创建的快捷方式发出的 Intent:

    I/ActivityManager(564): START u0 {act=android.intent.action.MAIN flg=0x10200000 cmp=com.freesky.sdkproxytestbed/.MainActivity bnds=[216,203][376,403]} from pid 29805

    仔细对比下是不是少了:cat=[android.intent.category.LAUNCHER]

    所以你只需要加上这个 Category 就OK了,奉上代码!

     1 private String getAppName() {
     2         String appName = "";
     3         try {
     4             PackageInfo info = this.getPackageManager().getPackageInfo(
     5                     this.getPackageName(), 0);
     6             appName = getString(info.applicationInfo.labelRes);
     7         } catch (NameNotFoundException e) {
     8         }
     9 
    10         return appName;
    11     }
    12 
    13     private int getAppIcon() {
    14         int appIcon = 0;
    15         try {
    16             PackageInfo info = this.getPackageManager().getPackageInfo(
    17                     this.getPackageName(), 0);
    18             appIcon = info.applicationInfo.icon;
    19         } catch (NameNotFoundException e) {
    20         }
    21         return appIcon;
    22     }
    23     
    24     public void createShortCut(Activity app, String componetName, String appName, int icon) {
    25         ComponentName comp = new ComponentName(this.getPackageName(), this.getPackageName() + "." + this.getLocalClassName());
    26         Intent shortcutIntent = new Intent(Intent.ACTION_MAIN).setComponent(comp);
    27         //加上这句能避免启动新的 Activity
    28         shortcutIntent.addCategory(Intent.CATEGORY_LAUNCHER);
    29 
    30         Intent intent = new Intent();
    31         
    32         intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
    33         intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, appName);
    34         
    35         ShortcutIconResource iconRes = Intent.ShortcutIconResource.fromContext(app, icon);
    36         intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes);
    37         // 不创建重复快捷方式
    38         intent.putExtra("duplicate", false);
    39         // 添加快捷方式
    40         intent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
    41         app.sendBroadcast(intent);
    42     }
  • 相关阅读:
    thinkphp5 模板中截取中文字符串
    .NET 操作PDF文档以及PDF文件打印摸索总结
    Mongodb 启动时 lock文件访问没有权限处理
    ASP.NET Web API 通过参数控制返回类型(JSON|XML)
    C# url 路径转换 相对路径 转换为 绝对路径
    Chrome浏览器允许跨域请求配置
    如何配置visual studio 2013进行负载测试-万事开头难
    分享:带波形的语音播放工具(wavesurfer-js)
    使用裸协议(相对协议)
    javascript ~~ 符号的使用
  • 原文地址:https://www.cnblogs.com/yichouangle/p/3125310.html
Copyright © 2011-2022 走看看