1. 程式人生 > >Android 顯示/隱藏 應用圖示

Android 顯示/隱藏 應用圖示

最近在為公司做一款車聯網的產品,由於公司本身擅長於汽車解碼器的研發,所以該產品的診斷功能的實現除了使用目前市面上車聯網產品中大量使用的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 顯示/隱藏 應用圖示

最近在為公司做一款車聯網的產品,由於公司本身擅長於汽車解碼器的研發,所以該產品的診斷功能的實現除了使用目前市面上車聯網產品中大量使用的OBD協議外,還會使用一些專車專用協議去實現一些特殊的診斷功能,如升窗降窗、保養歸零、讀TPMS資料流等。公司的想法是把這些專車專用的診斷當成一種付費服務提供給使用者,即使用

關於android手機桌面應用圖示的角標通知

vivo桌面角標通知: 網上有相關的程式碼實現方式,但是經過vivo官方文件沒有找到對應方法,於是找到客服給我的回覆是未開放此功能,具功能只對指定應用開放,下面是客服的回覆截圖 小米桌面角標通知: 文件裡面有實現該功能的原始碼。但是比較坑的是要將設計角標的應用的

Android動態修改應用圖示和名稱

遇到的坑 這裡我把做這個功能中遇到的一些問題寫在前面,是為了大家能先了解有什麼問題存在,遇到這些問題的時候就不慌了,這裡我把應用圖示和名稱先統一使用icon代替進行說明。 1、動態替換icon,只能替換內建的icon,無法從伺服器端獲取來更新icon; 2、動態替換icon以後,應用內更新的時候必須要切

隱藏應用圖示

一些主題應用只含有資原始檔。不需要顯APP圖示。// 消失主應用圖示 private void setComponentEnabled(Context context, Class<?>

Touch Bar 廢物利用系列 | 在觸控欄上顯示 Dock 應用圖示

簡評: 這是我見過的最有用的 TouchBar 應用,感謝@Acyclee 分享 都說 Intel 第八代 CPU 對比上代

一篇文章看明白 Android 從點選應用圖示到介面顯示的過程

Android - Activity 啟動過程 概述 從點選桌面應用圖示到應用顯示的過程我們再熟悉不過了,下面我們來分析下這個過程都做了什麼。 本文主要對以下問題分析: ActivityThread 是什麼,它是一個執行緒嗎,如何被啟動的? Act

Android 8.0系統的應用圖示顯示問題

Android 8.0之後,APP的應用圖片會顯示成AndroidStudio的預設圖示(機器人的那個),那麼如果才能顯示我們自己設計的圖示呢?結論是:要做Android 8.0的系統圖片適配。1、在下圖中的mipmap-anydpi-v26資料夾上右鍵,New->Im

Android啟動後icon應用圖示不能顯示的可能問題

前幾天寫一個安卓小應用程式,在icon應用圖示上我找了半天才找到一個比較滿意的圖片,但是部署到模擬器上圖示卻是安卓系統圖標。 一開始我以為是模擬器的問題又用真機測試了一下,結果也是系統圖標。以前遇到過

使Android應用的AlertDialog對話方塊中的按鈕顯示為ImageButton圖示,並設定相應

最終示意圖如下所示: 首先需要新建一個layout檔案:new_layout.xml: 這裡定義有三個按鈕 <?xml version="1.0" encoding="UTF-8" ?> <LinearLayout xmlns:android

Android 動態隱藏顯示導航欄,狀態欄

sets tab mil repeat art gif ava hide sticky Talk is cheap, show me the code.--Linus TorvaldsOkay, here:一、導航欄:[java] view plain copyprivat

jQuery遍歷多個相同的class,點選顯示隱藏圖示顯示隱藏其下的內容

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=

Android應用圖示

圖示位置:app——>res——>mipmap——>ic_launcher.png hdpi:高解析度 mdpi:低解析度 圖示的尺寸: 48px、72px、96px、144px、192px 在app——>manifests下的AndroidManifest.

Android系統的桌面圖示文字的雙行顯示

一、應用名稱長短不一,一行可能顯示不全需要多行顯示。由於Launcher空間有限,特別是橫屏的時候,圖示預留的空間很小,所以一般不建議多行顯示。如果一定要多行顯示,我們建議豎屏下最多顯示兩行,橫屏下保持單行顯示 二、配置屬性(我的是沒配置屬性的) 1、豎屏 在路徑:packages\ap

Android桌面隱藏圖示

//隱藏桌面圖示 new Thread(){ @Override public void run() { SystemClock.sleep(10000);//十秒後桌面圖示影藏

android應用圖示Drawable轉Bitmap,適配安卓8.0

相信大家在載入應用圖示的時候,經常會將得到的Drawable轉成Bitmap,程式碼如下: Drawable drawable = mPackageManager.getApplicationIcon(packageName); return ((BitmapDrawable) drawabl

Android RecyclerView隱藏item(多佈局)的所在區域顯示空白

問題描述 由於需求,需要把recycler view的其中一個條目GONE掉,且該RecyclerView為多佈局狀態,複寫了getItemViewType()方法。若只是把內容隱藏,這樣就會出現一片

80.android 簡單的當前fragment頁面判斷顯示隱藏的兩種方式

//第一種 是切換fragment頁面使用: @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser

[Xcode10 實際操作]一、博主領進門-(14)在頂部狀態列顯示風火輪以及為應用程式新增應用圖示

本文將演示在頂部狀態列顯示風火輪。 主要用於在執行某個長時間動作時,提示使用者耐心等待動作的執行。 在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】 應用程式物件的核心作用,是提供程式執行期間的控制和協作。 每一個程式必須有,且僅有一個應用例項。 1 im

隱藏應用程式在工作列中的圖示

實現效果:    知識運用:   設定窗體的ShowInTaskBar屬性為false來實現 實現程式碼: private void Form1_Load(object sender, EventArgs e) { this.ShowIn

Android 仿美團懸浮購物車顯示隱藏

效果圖: 這是美團的效果 通過效果圖可以看到 靜止的時候是購物車圖示是顯示的,滑動的時候是隱藏一半並半透明顯示的。 這裡用到一個觸控反饋的方法dispatchTouchEvent MotionEvent.ACTION_DOWN://手指按下 Mot