转http://www.cnblogs.com/allenzheng/p/4510725.html#3186608

Android APP安装后不在桌面显示图标的应用场景举例和实现方法

最近在为公司做一款车联网的产品,由于公司本身擅长于汽车解码器的研发,所以该产品的诊断功能的实现除了使用目前市面上车联网产品中大量使用的OBD协议外,还会使用一些专车专用协议去实现一些特殊的诊断功能,如升窗降窗、保养归零、读TPMS数据流等。公司的想法是把这些专车专用的诊断当成一种付费服务提供给用户,即用户在免费使用基于OBD协议实现的诊断功能外,若想使用专车专用协议实现的某个特殊功能则需要按每个功能多少钱的形式付费(本人不太赞成靠这种方式赚钱,觉得还是免费的好)。

我主要负责这款车联网产品中Android APP的开发,对于实现前面所提及的这个产品需求,我们准备把每款车的特殊功能诊断程序做成一个个的子程序,即一个个的子APK,之所以选择这样的一种方式,原因在于:①当前市面上车型很多,每个车型对应的同一个特殊功能的诊断程序因汽车协议不同而不一样,若全部程序都放在一个APP中,势必会造成APP过大,后期也不好维护;②提供这些特殊功能的初衷是为了迎合专业的汽车维修人员和车辆改装发烧友(以下称为“专业用户”)的需求,很可能大部分普通用户都不会去使用,这样能更方便需要的用户下载。

为了在用户安装了子APK之后不至于让用户的桌面全是各种图标(本人很讨厌手机桌面太乱),体验太差且让程序的入口还能集中在主APK,只能想办法使用一些小技巧在桌面不显示这些图标。具体实现方式如下:

1、开发一个名为OpenNoIconAPP.apk的主APP,里面就一个按钮用于点击后打开子APP,核心跳转代码如下:

public void onClick(View view) {

switch (view.getId()) {

case R.id.btn_open_app:

/*

* Intent intent = getPackageManager().getLaunchIntentForPackage(

* "com.example.noicontest"); if (intent != null) { //

* startActivity(intent); } else {

* Toast.makeText(getApplicationContext(), "没有该子APP,请下载安装",

* Toast.LENGTH_LONG).show(); }

*/

Intent intent = new Intent();

ComponentName cn = new ComponentName("com.example.noiconapp","com.example.noiconapp.MainActivity");

intent.setComponent(cn);

intent.setAction("android.intent.action.MAIN");

try {

startActivityForResult(intent, RESULT_OK);

} catch (Exception e) {

Toast.makeText(this, "没有该子APP,请下载安装",Toast.LENGTH_SHORT).show();

}

break;

default:

break;

}

}

2、开发名为NoIconAPP.apk的子APP(用于主APP去打开),该APP主要实现在桌面不显示图标。其中要想不显示桌面图标只需修改AndroidManifest.xml文件即可。具体如下:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.example.noiconapp"

android:versionCode="1"

android:versionName="1.0" >

<uses-sdk

android:minSdkVersion="14"

android:targetSdkVersion="14" />

<application

android:allowBackup="true"

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

<activity

android:name="com.example.noiconapp.MainActivity"

android:label="@string/app_name" >

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<!-- 要想在桌面不显示图标,只需注释掉APP入口Activity中的下面这句即可,或者把下面的LAUNCHER改成DEFAULT也行 -->

<!-- <category android:name="android.intent.category.LAUNCHER" /> -->

</intent-filter>

</activity>

</application>

</manifest>

3、上面的设置可以让桌面图标不显示的原因:

一般情况下,当我们的APK在被安装后,系统会自动创建我们的APK程序,系统Launcher(系统桌面应用程序)会自动检测系统已经安装的应用软件的包名,然后把这些APP的图标和名称解析出来后显示在应用程序列表里,一旦我们像上面那样设置不显示APK图标,则APK程序在运行后只会显示在“正在运行”的程序列表中,而不会在桌面上显示图标和名字。如果只是设置APP图标不可见而使用第一种方式(我注释的代码)打开APP是不会成功的,因为这样设置后,包名根本就没有加载到Launcher,所以通过 getPackageManager().getLaunchIntentForPackage()方法得到的Intent为null。

4、其它举例:

前几天更新了联通“手机应用厅”的最新版Android APP,发现新增加的“网络测速”功能其实是一个子APP,使用的正是这种方式。

5、示例程序:

点击下载

转Android APP安装后不在桌面显示图标的应用场景举例和实现方法的更多相关文章

  1. Android APP安装后不在桌面显示图标的应用场景举例和实现方法

    最近在为公司做一款车联网的产品,由于公司本身擅长于汽车解码器的研发,所以该产品的诊断功能的实现除了使用目前市面上车联网产品中大量使用的OBD协议外,还会使用一些专车专用协议去实现一些特殊的诊断功能,如 ...

  2. Android APP安装后不在桌面显示图标的应用场景

    一般情况下是由于特殊情况下,需要隐藏app的启动入口,即在launcher界面不需要显示该入口,会由其他app跳转至.怎么设置如下代码: <activity android:name=" ...

  3. 有关DevExpress 安装后vs工具箱不显示图标的错误

    在https://www.devexpress.com/Support/Center/Question/Details/T214296/missing-icons-from-toolbox找到解决方法 ...

  4. Android Studio安装后第一次进不去

    Android Studio 安装后第一次进不去,因为检查到有更新的SDK,在下载.但是呢,没有FQ的情况下,无法下载下来,所以就卡住了. 那么解决方案就是让 Android Studio 第一次启动 ...

  5. Android Studio安装后提示No JVM installation found解决办法

    Android Studio安装后提示No JVM installation found解决办法 问题描述:Android Studio安装完毕,打开时出现提示"No JVM install ...

  6. android app上线后bug的处理

    app上线后,后期维护显得尤为重要,今天给大家分享一下app上线后出现bug后的解决方法 1.继承Application类,重写onCreate方法 import java.io.File; impo ...

  7. Centos6.4最小化安装后使用xfce桌面环境

    由于我个人使用的Centos是在虚拟机中最小化安装的,gnome实在是不喜欢,所以自己装了个xfce,安装后启动不起来,才发现x window等依赖环境没装,为了少走弯路,在此写下安装过程. 1.yu ...

  8. Android Studio安装后配置默认新工程目录以及.gradle,.android,.m2和system,config目录

    关于在哪里设置:以下所有设置都是在没有打开工程的前提下设置的, Configure > Settings 如图: 不要使用 Configure > Project Defaults> ...

  9. android studio安装后卡在fetching Android sdk compoment information

    解决办法: 找到android studio 安装目录下bin目录中(D:\Android\Android Studio\bin)的idea.properties文件,在文件末尾处添加disable. ...

随机推荐

  1. QT小技巧—更好管理项目(增加预编译头文件,并且指定moc文件的生成位置)good

    预编译加速编译 QT也可以像VS那样使用预编译头文件来加速编译器的编译速度.首先在.pro文件中加入: CONFIG += precompiled_header 然后定义需要预编译的头文件: PREC ...

  2. 使用Docker构建持续集成与自动部署的Docker集群

    为什么使用Docker " 从我个人使用的角度讲的话  部署来的更方便 只要构建过一次环境 推送到镜像仓库 迁移起来也是分分钟的事情 虚拟化让集群的管理和控制部署都更方便 hub.docke ...

  3. ddraw 视频下画图 不闪烁的方法

    我们如果是在在RGB视频上画图(直线,矩形等),一般采用双缓冲区继续,使用内存MemoryDC,来实现画的图形在视频上显示不闪烁的功能,但是我们知道用RGB显示视频都是使用GDI进行渲染,这样很耗CP ...

  4. Structs 2

    1  redirect.redirectaction和chain 的区别 当使用type="redirectAction" 或type="redirect"提交 ...

  5. Android记录4--自定义ToggleButton+用SharedPreferences保存用户配置

    Android记录4--自定义ToggleButton+用SharedPreferences保存用户配置 2013年8月14日Android记录 很多应用都会有用户设置,用户的一些偏好可以由用户来决定 ...

  6. Ext JS学习第十六天 事件机制event(一)

    此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件,相信你一定不陌生, 基本事件是什么?就类似于click.keypress.focus. ...

  7. 杭电ACM 2052 Picture

    Picture Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  8. Visual Studio shortcut keys

    VS2010 快捷键   Ctrl+E,D ----格式化全部代码  Ctrl+E,F ----格式化选中的代码  CTRL + SHIFT + B生成解决方案  CTRL + F7 生成编译  CT ...

  9. C# Programming Study #1

    引用的时候需要在参数和使用的时候加上 ref 关键字 static bool addnum (ref int val) //引用 { ++val; return true; } 参数数组的概念,可以接 ...

  10. hibernate懒加载和json序列化冲突

    因为懒加载这个对象属性只是一个代理对象,如果json直接当作一个存在的属性去序列化就会出现错误,所以就只能这样了,当然还有其他办法吧 或者在class上加上 @JsonIgnoreProperties ...