您的位置:首页 > 移动开发 > Android开发

android手把手教你开发launcher(三)——启动安装的应用程序

2014-02-21 16:33 281 查看
1. 监听GridView的onItemClick事件
设置一个监听器是为了当gridView的某项被点击时,会有一个回调函数通知我们。
我们调用appsGrid.setOnItemClickListener(listener); 设置一个监听器
appsGrid.setOnItemClickListener(listener)中的listener是一个接口,其类型为:android.widget.AdapterView.OnItemClickListener
 
下面我们new一个android.widget.AdapterView.OnItemClickListener类型的对象作为参数。我们直接使用eclipde的自动补全功能来完成OnItemClickListener 的定义:

[java] view
plaincopyprint?

private OnItemClickListener listener = new OnItemClickListener() {  

        @Override  

        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {  

  

        }  

    }  

接口OnItemClickListener 中有一个方法叫做onItemClick,我们实现它即可。下面我对onItemClick的几个参数略作说明:
parent     略
view          被点击的view
position     被点击项的位置
id             被点击项的id

2.启动被点击应用的activity

一般来讲,我们根据position即可知道被点击的项目是哪一项了。现在我们根据被点击的项目,取出对应的应用程序数据(主要是其中的主activity),然后启动activity。用下面代码实现:

?

[java]view
plaincopyprint?

private OnItemClickListener clickListener = new OnItemClickListener() {  

        @Override  

        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {  

            ResolveInfo info = apps.get(i);  

            //该应用的包名  

            String pkg = info.activityInfo.packageName;  

            //应用的主activity类  

            String cls = info.activityInfo.name;  

            ComponentName componet = new ComponentName(pkg, cls);  

  

            Intent intent = new Intent();  

            intent.setComponent(componet);  

            startActivity(intent);  

        }  

    };  

[java] view
plaincopyprint?

private OnItemClickListener clickListener = new OnItemClickListener() {  

        @Override  

        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {  

            ResolveInfo info = apps.get(i);  

            //该应用的包名  

            String pkg = info.activityInfo.packageName;  

            //应用的主activity类  

            String cls = info.activityInfo.name;  

            ComponentName componet = new ComponentName(pkg, cls);  

  

  

            Intent intent = new Intent();  

            intent.setComponent(componet);  

            startActivity(intent);  

        }  

    };  

代码中的中文注释可能会引起Gradle报错



解决办法:http://blog.csdn.net/sljjyy/article/details/11976099

现在整个类代码如下:

[java] view
plaincopyprint?

package com.sljjyy.sao.launcher;  

  

import android.content.ComponentName;  

import android.content.Intent;  

import android.content.pm.ResolveInfo;  

import android.os.Bundle;  

import android.app.Activity;  

import android.view.Menu;  

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;  

  

import java.util.List;  

  

public class MainActivity extends Activity {  

    GridView appsGrid;  

    private List<ResolveInfo> apps;  

  

    @Override  

    protected void onCreate(Bundle savedInstanceState) {  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.activity_main);  

        loadApps();  

        appsGrid = (GridView) findViewById(R.id.apps_list);  

        appsGrid.setAdapter(new AppsAdapter());  

  

        appsGrid.setOnItemClickListener(clickListener);  

    }  

  

  

    @Override  

    public boolean onCreateOptionsMenu(Menu menu) {  

        // Inflate the menu; this adds items to the action bar if it is present.  

        getMenuInflater().inflate(R.menu.main, menu);  

        return true;  

    }  

  

    private OnItemClickListener clickListener = new OnItemClickListener() {  

        @Override  

        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {  

            ResolveInfo info = apps.get(i);  

            //该应用的包名  

            String pkg = info.activityInfo.packageName;  

            //应用的主activity类  

            String cls = info.activityInfo.name;  

            ComponentName componet = new ComponentName(pkg, cls);  

  

            Intent intent = new Intent();  

            intent.setComponent(componet);  

            startActivity(intent);  

        }  

    };  

  

  

    private void loadApps() {  

        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);  

        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);  

        new ImageView(MainActivity.this);  

  

        apps = getPackageManager().queryIntentActivities(mainIntent, 0);  

    }  

  

  

    public class AppsAdapter extends BaseAdapter {  

  

        public AppsAdapter(){  

        }  

  

        @Override  

        public int getCount() {  

            return apps.size();  

        }  

  

        @Override  

        public Object getItem(int i) {  

            return apps.get(i);  

        }  

  

        @Override  

        public long getItemId(int i) {  

            return i;  

        }  

  

  

        @Override  

        public View getView(int i, View view, ViewGroup viewGroup) {  

            ImageView iv;  

  

            if(view == null){  

                iv = new ImageView(MainActivity.this);  

                iv.setScaleType(ImageView.ScaleType.FIT_CENTER);  

                iv.setLayoutParams(new GridView.LayoutParams(50, 50));  

            } else {  

                iv = (ImageView) view;  

            }  

            ResolveInfo info = apps.get(i);  

            iv.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));  

            return iv;  

        }  

    }  

}  

android手把手教你开发launcher(一)(AndroidStudio版)


android手把手教你开发launcher(二)——列出安装的应用程序


android手把手教你开发launcher(三)——启动安装的应用程序


android手把手教你开发launcher(四)——显示widget


android手把手教你开发launcher(五)——设置壁纸

转自:http://www.bangchui.org/read.php?tid=12208
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐