Android Launcher–簡易Launcher開發

來源:互聯網
上載者:User

 

 第一步,把我們的應用程式作為home(即實現按下home鍵,啟動自己的launcher.)

要把我們的應用程式作為home,只需要在AndroidManifest.xml中添加:
 <category android:name="android.intent.category.HOME" />
 <category android:name="android.intent.category.DEFAULT" />

AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="org.bangchui.myhome"      android:versionCode="1"      android:versionName="1.0">    <application android:icon="@drawable/icon" android:label="@string/app_name">        <activity android:name=".MyHome"                  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>

 

第二步,列出安裝的應用程式

列出已經安裝的應用程式是作為launcher比不可少的功能。下面我們就講解怎樣將應用程式列出來。程式運行後的樣子如下:

1. 修改main.xml,在其中添加一個GridView用來顯示應用程式列表。

main.xml <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical" android:layout_width="fill_parent"    android:layout_height="fill_parent">         <GridView android:layout_width="match_parent"        android:id="@+id/apps_list"        android:numColumns="4"        android:layout_height="wrap_content">    </GridView> </LinearLayout

 

2 . 通過PackageManager的api 查詢已經安裝的apk

privatevoid loadApps() {
Intent mainIntent =new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);

mApps = getPackageManager().queryIntentActivities(mainIntent, 0);
}

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(MyHome.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;        }

 

4.監聽GridView的onItemClick事件

設定一個監聽器是為了當gridView的某項被點擊時,會有一個回呼函數通知我們。
我們調用mGrid.setOnItemClickListener(listener); 設定一個監聽器
mGrid.setOnItemClickListener(listener)中的listener是一個介面,其類型為:android.widget.AdapterView.OnItemClickListener

private OnItemClickListener listener =new OnItemClickListener() {
@Override
publicvoid onItemClick(AdapterView<?> parent, View view, int position,long id) {
//事件內容....
}
};

5.啟動被點擊應用的activity

一般來講,我們根據position即可知道被點擊的項目是哪一項了。現在我們根據被點擊的項目,取出對應的應用程式資料(主要是其中的主activity),然後啟動activity。用下面代碼實現:

publicvoid 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);
}

最後整個Activity的代碼如下:

MyHome.javapackage org.bangchui.myhome;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.BaseAdapter;import android.widget.GridView;import android.widget.ImageView;import android.widget.AdapterView.OnItemClickListener;public class MyHome extends Activity {    private List<ResolveInfo> mApps;    GridView mGrid;    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);        }    };    /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        loadApps();        setContentView(R.layout.main);        mGrid = (GridView) findViewById(R.id.apps_list);        mGrid.setAdapter(new AppsAdapter());        mGrid.setOnItemClickListener(listener);    }    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(MyHome.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;        }    }}

轉載自:http://www.cnblogs.com/playing/archive/2011/04/13/2014705.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.