zoukankan      html  css  js  c++  java
  • android home

    引用:http://www.cnblogs.com/playing/archive/2011/04/13/2014705.html

    第一步,把我们的应用程序作为home(即实现按下home键,启动自己的launcher.)

    要把我们的应用程序作为home,只需要在AndroidManifest.xml中添加:
     <category android:name="android.intent.category.HOME" />
     <category android:name="android.intent.category.DEFAULT" />

    AndroidManifest.xml

    第二步,列出安装的应用程序

    列出已经安装的应用程序是作为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,使其显示获得的应用程序列表

    View Code
    复制代码
    publicclass 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;
    }

    publicfinalint getCount() {
    return mApps.size();
    }

    publicfinal Object getItem(int position) {
    return mApps.get(position);
    }

    publicfinallong 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.java
    复制代码
    package 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;

    publicclass MyHome extends Activity {
        
    private List<ResolveInfo> mApps;
        GridView mGrid;
        
    private OnItemClickListener listener =new OnItemClickListener() {
            @Override
            
    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);
            }

        };

        
    /** Called when the activity is first created. */
        @Override
        
    publicvoid 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);
        }


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

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

        
    publicclass 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;
            }

            
    publicfinalint getCount() {
                
    return mApps.size();
            }

            
    publicfinal Object getItem(int position) {
                
    return mApps.get(position);
            }

            
    publicfinallong getItemId(int position) {
                
    return position;
            }
        }
    }
    复制代码

     

  • 相关阅读:
    How to build Linux system from kernel to UI layer
    Writing USB driver for Android
    Xposed Framework for Android 8.x Oreo is released (in beta)
    Linux Smartphone Operating Systems You Can Install Today
    Librem 5 Leads New Wave of Open Source Mobile Linux Contenders
    GUADEC: porting GNOME to Android
    Librem 5 – A Security and Privacy Focused Phone
    GNOME and KDE Join Librem 5 Linux Smartphone Party
    Purism计划推出安全开源的Linux Librem 5智能手机
    国产系统之殇:你知道的这些系统都是国外的
  • 原文地址:https://www.cnblogs.com/sode/p/3000516.html
Copyright © 2011-2022 走看看