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 鍵時會有提示如下:
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 處理點選事件,啟動該圖示應用的主Activityprivate 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;
}
}
}
執行效果如下圖:
點選圖示即可執行對應的應用程式。
顯示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