1. 程式人生 > >Android Launcher 應用開發

Android Launcher 應用開發

1.簡介

Android Launcher ,也就是Android 的桌面應用程式。

Android Launcher 的功能主要包括有:顯示並啟動已安裝的應用程式、顯示桌面(動態)桌布、顯示系統小部件widget 等。

接下來就開始按照一個一個功能實現一個簡單的Launcher 應用程式。

2.建立Launcher 應用

建立Android應用程式,修改Manifest 清單檔案如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.andy.home"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="25" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="android.intent.category.HOME" />                 
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>

</manifest>

新增的內容:

<category android:name="android.intent.category.HOME" />                 
<category android:name="android.intent.category.DEFAULT" />

此時系統可以識別該應用程式為桌面應用程式。

執行程式時並沒有特別,但是按下Home 鍵時會有提示如下:

0001

3.列出已安裝的應用程式

3.1修改 activity_main.xml 

新增一個GridView 用來顯示應用程式列表,activity_main.xml 如下:

<LinearLayout  
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <GridView 
        android:id="@+id/apps_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:numColumns="4" />

</LinearLayout >

3.2 通過PackageManager的api 查詢已經安裝的apk
	private List<ResolveInfo> mApps;
	private GridView mGrid;
private void loadApps() {
        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
 
        mApps = getPackageManager().queryIntentActivities(mainIntent, 0);
    }

3.3  實現用於顯示Gridview的Adapter,使其顯示獲得的應用程式列表
public class AppsAdapter extends BaseAdapter {
        public AppsAdapter() {
        }
 
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView i;
 
 
            if (convertView == null) {
                i = new ImageView(MainActivity.this);
                i.setScaleType(ImageView.ScaleType.FIT_CENTER);
                i.setLayoutParams(new GridView.LayoutParams(50, 50));
            } else {
                i = (ImageView) convertView;
            }
 
            ResolveInfo info = mApps.get(position);
            i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));
 
            return i;
        }
 
        public final int getCount() {
            return mApps.size();
        }
 
        public final Object getItem(int position) {
            return mApps.get(position);
        }
 
        public final long getItemId(int position) {
            return position;
        }
	}

3.4 監聽GridView的onItemClick事件

設定一個監聽器,當GridView 的某一個項被點選時,回撥函式通知我們處理事件。

@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		loadApps();
        setContentView(R.layout.activity_main);
        mGrid = (GridView) findViewById(R.id.apps_list);
        mGrid.setAdapter(new AppsAdapter());

        mGrid.setOnItemClickListener(listener);
	}
	
	private OnItemClickListener listener = new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
            //事件處理
        }

    };
3.5 處理點選事件,啟動該圖示應用的主Activity

private OnItemClickListener listener = new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
            ResolveInfo info = mApps.get(position);
            
            //該應用的包名
            String pkg = info.activityInfo.packageName;
            //應用的主activity類
            String cls = info.activityInfo.name;
            
            ComponentName componet = new ComponentName(pkg, cls);
            
            Intent i = new Intent();
            i.setComponent(componet);
            startActivity(i);
        }

    };

整個MainActivity 的程式碼如下:
package com.andy.home;

import java.util.List;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;

public class MainActivity extends Activity {
	private List<ResolveInfo> mApps;
	private GridView mGrid;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		loadApps();
        setContentView(R.layout.activity_main);
        mGrid = (GridView) findViewById(R.id.apps_list);
        mGrid.setAdapter(new AppsAdapter());

        mGrid.setOnItemClickListener(listener);
	}
	
	private OnItemClickListener listener = new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
            ResolveInfo info = mApps.get(position);
            
            //該應用的包名
            String pkg = info.activityInfo.packageName;
            //應用的主activity類
            String cls = info.activityInfo.name;
            
            ComponentName componet = new ComponentName(pkg, cls);
            
            Intent i = new Intent();
            i.setComponent(componet);
            startActivity(i);
        }

    };
	
	
	private void loadApps() {
        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
 
        mApps = getPackageManager().queryIntentActivities(mainIntent, 0);
    }
	
	
	
	public class AppsAdapter extends BaseAdapter {
        public AppsAdapter() {
        }
 
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView i;
 
 
            if (convertView == null) {
                i = new ImageView(MainActivity.this);
                i.setScaleType(ImageView.ScaleType.FIT_CENTER);
                i.setLayoutParams(new GridView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
            } else {
                i = (ImageView) convertView;
            }
 
            ResolveInfo info = mApps.get(position);
            i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));
 
            return i;
        }
 
        public final int getCount() {
            return mApps.size();
        }
 
        public final Object getItem(int position) {
            return mApps.get(position);
        }
 
        public final long getItemId(int position) {
            return position;
        }
	}

}
執行效果如下圖:

0002

點選圖示即可執行對應的應用程式。

顯示widget 和桌面桌布將在下一篇介紹。。。



相關推薦

Android Launcher 應用開發

1.簡介 Android Launcher ,也就是Android 的桌面應用程式。 Android Launcher 的功能主要包括有:顯示並啟動已安裝的應用程式、顯示桌面(動態)桌布、顯示系統小部件widget 等。 接下來就開始按照一個一個功能實現一個簡單的Launc

Android應用開發基礎

程序包 兼容 能夠 tick 狀態欄通知 lib 系統應用 java 指定 Android應用開發基礎 英文地址:http://developer.android.com/guide/components/fundamentals.html 本人英語水平不高,如有

【Mono for Android應用開發初探(2)

這是效果圖。但是新建 OpenGL 遊戲(Android)      Visual C#   工程時,遇到了問題。 即使我在AndroidManifest.xml中添加了網路許可權 <uses-perm

【Mono for Android應用開發初探(1)

1.安裝VS2017 -1- -2- -3- -4- 第一次裝的時候如果只裝 Xamarin Workbooks \ Android Nd

Android手機應用開發------基礎的事件處理

實驗目的: 瞭解Android程式設計基礎。 熟悉Button、RadioButton、EditText等基本控制元件,能夠處理這些控制元件的基本事件。 學會彈出對話方塊,並定製對話方塊中的內容,能對確定和取消按鈕的事件做處理。 1.首先要知道在哪裡新

ACR122U Android應用開發入道指南

前言 “API指導”為本文的核心部分,其翻譯自官方的API文件。在“參考資料”部分說明了我所參考的官方API的版本,並提供下載地址。為便於理解並著手開發,我在“相關知識”部分順便添加了我查詢到的與之相關的必備知識。 參考資料 官方API文件 我主要參考官方提供

ArcGIS Android API 應用開發之圖形繪製與長度面積量算

本文通過一個簡單的小Demo,向大家介紹如何使用ArcGIS Android API繪製點、線、面圖形,並且測量線的長度和多邊形的面積。 首先來看一下程式執行的效果圖: 實現上述功能,首先需要向地圖中新增一個GraphicsLayer,用來繪製Point、Poly

Android直播開發之旅(9):OkCamera,Android 相機應用開發通用庫

OkCamera,Android 相機應用開發通用庫 轉載請宣告出處:http://blog.csdn.net/andrexpert/article/details/79302576     明天就可以回家過年了,有點小激動,於是乎趕緊寫篇文章壓壓驚!本文主要介紹最近

Android系統應用開發(九)遮蔽狀態列下拉

網上關於遮蔽狀態列的文章搜到不少,但都是針對某個應用,或者鎖屏狀態,才能遮蔽狀態列的下拉,而我的需求是不管任意狀態都遮蔽狀態列下拉,百度到的也可能版本不一樣,說的一些檔案都找不到,搜到一篇文章,自己修改了一個方法,然後OK了,具體如下: 檔案位置:frameworks

關於Android TV應用開發的心得體會

從去年開始搞Android TV應用開發差不多快一年了,雖然中間有個幾個月沒搞,不過現在總算還是回到正軌上來了,所以記錄一下自己的一些收穫和體會,大家有什麼好的建議也歡迎留言分享,本文不間斷更新。這裡有TV開發的QQ群【522186932】,歡迎大家,群主是個很

Android系統應用開發(六)Android framework系統預設設定修改

launcher 總結:  1、launcher的佈局太居中,要想兩邊拉伸 <\packages\apps\Launcher2\res\values\dimens.xml> <dimen name="apps_customize_pageLayo

Android BLE應用開發的注意事項

1.在工廠中生產了很多裝置一起堆放時應用會可能發生ANR,原因是裝置很多時會不停的呼叫onLeScan()方法,在 BluetoothAdapter.startLeScan()的時候,在BluetoothAdapter.LeScanCallback.onLeScan()中不

Android Studio應用開發簡介

2017年6月,英創公司在ESM6802+10.1”LCD的硬體平臺上成功執行Android 7.1.1原生作業系統。2017年8月,ESM6802 Android 版可以支援GPIO、串列埠、乙太網、U盤。後續將進一步完善對CAN、SPI、I2C、WIFI、4

Android系統應用開發(四)系統語言以及新增字型庫

1.如何向android的setting語言列表中新增一門語言 第一種:修改配置檔案 位置:build/target/product/languages_full.mk| languages_small.mk,這兩個檔案裡頭,有PRODUCT_LOCALES := en_U

Android手機應用開發(七) | 資料儲存(下)

實驗目的 學習SQLite資料庫的使用。 學習ContentProvider的使用。 複習Android介面程式設計。 這次大概是做一個有登入、註冊、評論、點贊等功能的小型APP 效果如下:(圖片比較大) 登入註冊頁面的切換 兩個按鈕用RadioB

Android應用開發:網絡工具——Volley(二)

respond sid 開發 多少 called creat miss 相等 eal 引言 在Android應用開發:網絡工具——Volley(一)中結合Cloudant服務介紹了Volley的一般使用方法,當中包括了兩種請求類型StringRequest和JsonOb

應用開發的怎樣查看Android源代碼

網上 zip 位置 attach for lod class文件 andro clip 當我們在eclipse中開發android程序的時候,往往須要看源碼(可能是出於好奇,可能是讀源碼習慣)。那麽怎樣查看Android源碼呢? 如果我們想參看Activity類

Android應用開發之所有動畫使用詳解

factory 技術分享 resource bsp phi 顯示 程序 恢復 分享 題外話:有段時間沒有更新博客了,這篇文章也是之前寫了一半一直放在草稿箱,今天抽空把剩余的補上的。消失的這段時間真的好忙,節奏一下子有些適應不過來,早晨七點四十就得醒來,晚上九點四十才準備下班

命令行下Android應用開發

連接 pac project p s -1 str ldp 變量 -i 本文介紹怎樣創建你的第一個Android應用程序。您將學到怎樣創建一個Androidproject和執行可調試版本號的應用程序。 開始本文學習之前。確保你已經安裝了開發環境。你須要: 1、下載A

Android 應用開發】 ActionBar 樣式具體解釋 -- 樣式 主題 簡單介紹 Actionbar 的 icon logo 標題 菜單樣式改動

detail sub str 進度條 代碼分析 extc dst 模式 html 作者 : 萬境絕塵 ([email protected]/* */)轉載請著名出處 : http://blog.csdn.net/shulianghan/article/deta