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

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

2013-09-24 14:41 369 查看
1. 监听GridView的onItemClick事件

设置一个监听器是为了当gridView的某项被点击时,会有一个回调函数通知我们。

我们调用appsGrid.setOnItemClickListener(listener); 设置一个监听器

appsGrid.setOnItemClickListener(listener)中的listener是一个接口,其类型为:android.widget.AdapterView.OnItemClickListener



下面我们new一个android.widget.AdapterView.OnItemClickListener类型的对象作为参数。我们直接使用eclipde的自动补全功能来完成OnItemClickListener 的定义:

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。用下面代码实现:

?
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 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报错



解决办法:/article/1870369.html

现在整个类代码如下:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐