天天看點

擷取android手機裡的所有應用,點選并響應

 在此我寫一個找到android手機裡的所有已裝應用程式(android手機自帶的也行),點選某個應用時,将做出響應 。

先看一下效果圖:

擷取android手機裡的所有應用,點選并響應

當點選《憤怒的小鳥》時,将打開《憤怒的小鳥》這個遊戲

擷取android手機裡的所有應用,點選并響應

main.xml的源代碼如下:

view plaincopy

to clipboardprint?

<?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 xmlns:android="http://schemas.android.com/apk/res/android"  

        android:id="@+id/gridview"  

        android:layout_width="fill_parent"  

        android:layout_height="fill_parent"  

        android:numcolumns="auto_fit"  

        android:verticalspacing="15dp"  

        android:horizontalspacing="12dp"  

        android:columnwidth="95dp"  

        android:stretchmode="columnwidth"  

        android:gravity="center"  

        />  

</linearlayout>  

<?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 xmlns:android="http://schemas.android.com/apk/res/android"

android:id="@+id/gridview"

android:numcolumns="auto_fit"

android:verticalspacing="15dp"

android:horizontalspacing="12dp"

android:columnwidth="95dp"

android:stretchmode="columnwidth"

android:gravity="center"

/>

</linearlayout>

接着是apps.xml,源代碼如下:

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

    android:orientation="vertical"        

    android:layout_width="fill_parent"      

    android:layout_height="fill_parent"       

    android:gravity="center" >  

    <imageview  

        android:id="@+id/apps_image"          

        android:layout_width="48dip"       

        android:layout_height="48dip"         

        android:icon="@drawable/icon" />      

    <textview          

        android:id="@+id/apps_textview"       

        android:layout_width="wrap_content"       

        android:layout_height="wrap_content"          

        android:maxlines="1"          

        android:maxems="5"        

        android:text="good" />  

android:gravity="center" >

<imageview

android:id="@+id/apps_image"

android:layout_width="48dip"

android:layout_height="48dip"

android:icon="@drawable/icon" />

<textview

android:id="@+id/apps_textview"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:maxlines="1"

android:maxems="5"

android:text="good" />

接下來就是java源代碼了,比較長,希望耐心看下去

package com.android.game;  

import java.util.arraylist;  

import java.util.list;  

import android.app.activity;  

import android.content.context;  

import android.content.intent;  

import android.content.pm.packageinfo;  

import android.content.pm.packagemanager;  

import android.graphics.drawable.drawable;  

import android.os.bundle;  

import android.view.layoutinflater;  

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.textview;  

import android.widget.adapterview.onitemclicklistener;  

public class apps extends activity {  

    // 用來記錄應用程式的資訊   

    list<appsiteminfo> list;  

    private gridview gridview;  

    private packagemanager pmanager;  

    @override  

    protected void oncreate(bundle savedinstancestate) {  

        // todo auto-generated method stub

        super.oncreate(savedinstancestate);  

        this.setcontentview(r.layout.main);  

        // 取得gridview   

        gridview = (gridview) findviewbyid(r.id.gridview);  

        // 擷取圖檔、應用名、包名   

        pmanager = apps.this.getpackagemanager();  

        list<packageinfo> applist = getallapps(apps.this);  

        list = new arraylist<appsiteminfo>();  

        for (int i = 0; i < applist.size(); i++) {  

            packageinfo pinfo = applist.get(i);  

            appsiteminfo shareitem = new appsiteminfo();  

            // 設定圖檔   

            shareitem.seticon(pmanager  

                    .getapplicationicon(pinfo.applicationinfo));  

            // 設定應用程式名字   

            shareitem.setlabel(pmanager.getapplicationlabel(  

                    pinfo.applicationinfo).tostring());  

            // 設定應用程式的包名

            shareitem.setpackagename(pinfo.applicationinfo.packagename);  

            list.add(shareitem);  

        }  

        // 設定gridview的adapter   

        gridview.setadapter(new baseadapter());  

        // 點選應用圖示時,做出響應

        gridview.setonitemclicklistener(new clicklistener());  

    }  

    public static list<packageinfo> getallapps(context context) {  

        list<packageinfo> apps = new arraylist<packageinfo>();  

        packagemanager pmanager = context.getpackagemanager();  

        // 擷取手機内所有應用   

        list<packageinfo> packlist = pmanager.getinstalledpackages(0);  

        for (int i = 0; i < packlist.size(); i++) {  

            packageinfo pak = (packageinfo) packlist.get(i);  

            // 判斷是否為非系統預裝的應用程式

            // 這裡還可以添加系統自帶的,這裡就先不添加了,如果有需要可以自己添加

            // if()裡的值如果<=0則為自己裝的程式,否則為系統工程自帶

            if ((pak.applicationinfo.flags & pak.applicationinfo.flag_system) <= 0) {  

                // 添加自己已經安裝的應用程式

                apps.add(pak);  

            }  

        return apps;  

    private class baseadapter extends baseadapter {  

        layoutinflater inflater = layoutinflater.from(apps.this);  

        @override  

        public int getcount() {  

            // todo auto-generated method stub

            return list.size();  

        public object getitem(int position) {  

            return null;  

        public long getitemid(int position) {  

            return position;  

        public view getview(int position, view convertview, viewgroup parent) {  

            viewholder holder;  

            if (convertview == null) {  

                // 使用view的對象itemview與r.layout.item關聯

                convertview = inflater.inflate(r.layout.apps, null);  

                holder = new viewholder();  

                holder.icon = (imageview) convertview  

                        .findviewbyid(r.id.apps_image);  

                holder.label = (textview) convertview  

                        .findviewbyid(r.id.apps_textview);  

                convertview.settag(holder);  

            } else {  

                holder = (viewholder) convertview.gettag();  

            holder.icon.setimagedrawable(list.get(position).geticon());  

            holder.label.settext(list.get(position).getlabel().tostring());  

            return convertview;  

    // 當使用者點選應用程式圖示時,将對這個類做出響應   

    private class clicklistener implements onitemclicklistener {  

        public void onitemclick(adapterview<?> arg0, view arg1, int arg2,  

                long arg3) {  

            // 将應用所選的應用程式資訊共享到application中

            myapp appstate = ((myapp) getapplicationcontext());  

            // 擷取目前所在頁籤

            string tab_id = appstate.gettab_id();  

            // 設定所選應用程式資訊

            appstate.set_appinfo(tab_id, list.get(arg2).getlabel(), list.get(  

                    arg2).geticon(), list.get(arg2).getpackagename());        

            intent intent = new intent(apps.this, game.class);  

            startactivity(intent);  

            // 銷毀目前activity   

            finish();  

    // 自定義一個 appsiteminfo 類,用來存儲應用程式的相關資訊

    private class appsiteminfo {  

        private drawable icon; // 存放圖檔

        private string label; // 存放應用程式名

        private string packagename; // 存放應用程式包名

        public drawable geticon() {  

            return icon;  

        public void seticon(drawable icon) {  

            this.icon = icon;  

        public string getlabel() {  

            return label;  

        public void setlabel(string label) {  

            this.label = label;  

        public string getpackagename() {  

            return packagename;  

        public void setpackagename(string packagename) {  

            this.packagename = packagename;  

}  

繼續閱讀