为获取GridView的发射具体应用 [英] Getting Specific Apps for gridview launcher

查看:188
本文介绍了为获取GridView的发射具体应用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我学习Android启动的时刻。

我已经成功地使发射用的GridView从Web示例code。

不过,我不希望显示在手机上安装的所有应用程序,只是想显示选择的应用程序。

有没有办法做到这一点?

 包com.example.gridlauncher;进口的java.util.List;进口android.os.Bundle;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.AdapterView;
进口android.widget.AdapterView.OnItemClickListener;
进口android.widget.BaseAdapter;
进口android.widget.GridView;
进口android.widget.ImageView;
进口android.app.Activity;
进口android.content.Context;
进口android.content.Intent;
进口android.content.pm.ActivityInfo;
进口android.content.pm.PackageManager;
进口android.content.pm.ResolveInfo;公共类MainActivity延伸活动{ 软件包管理系统myPackageManager; 公共类MyBaseAdapter延伸BaseAdapter {  私人语境myContext;
  私人列表< ResolveInfo> MyAppList;  MyBaseAdapter(上下文C,列表与LT; ResolveInfo→1){
   myContext = C;
   MyAppList = 1;
  }  @覆盖
  公众诠释的getCount(){
   返回MyAppList.size();
  }  @覆盖
  公共对象的getItem(INT位置){
   返回MyAppList.get(位置);
  }  @覆盖
  众长getItemId(INT位置){
   返回的位置;
  }  @覆盖
  公共查看getView(INT位置,查看convertView,父母的ViewGroup){   ImageView的ImageView的;
   如果(convertView == NULL){
    //如果它不回收,初始化一些属性
    ImageView的=新ImageView的(myContext);
    imageView.setLayoutParams(新GridView.LayoutParams(85,85));
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    imageView.setPadding(8,8,8,8);
   }其他{
    ImageView的=(ImageView的)convertView;
   }   ResolveInfo resolveInfo = MyAppList.get(位置);
   imageView.setImageDrawable(resolveInfo.loadIcon(myPackageManager));   返回ImageView的;  } }    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.main);        myPackageManager = getPackageManager();        意向意图=新意图(Intent.ACTION_MAIN,NULL);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        清单< ResolveInfo> 。intentList = getPackageManager()queryIntentActivities(意向,0);        GridView控件的GridView =(GridView控件)findViewById(R.id.gridview);
        gridview.setAdapter(新MyBaseAdapter(这一点,intentList));        gridview.setOnItemClickListener(myOnItemClickListener);
    }    OnItemClickListener myOnItemClickListener =
      新OnItemClickListener(){    @覆盖
    公共无效onItemClick(适配器视图<>母公司,观景,
      INT位置,长的id){
     ResolveInfo cleckedResolveInfo =
       (ResolveInfo)parent.getItemAtPosition(位置);
     ActivityInfo clickedActivityInfo =
       cleckedResolveInfo.activityInfo;     意向意图=新意图(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        intent.setClassName(
          clickedActivityInfo.applicationInfo.packageName,
          clickedActivityInfo.name);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
          Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        startActivity(意向);    }    };}


解决方案

之间


清单< ResolveInfo> 。intentList = getPackageManager()queryIntentActivities(意向,0);


gridview.setAdapter(新MyBaseAdapter(这一点,intentList));

只需添加白名单过滤器除去从 intentList 不需要的物品。

I am studying android launcher at the moment.

I've succeeded in making the launcher with Gridview with sample code from the web.

However, I don't want to show all the apps installed on the phone, just wanna show selected apps.

Is there any way to do that?

package com.example.gridlauncher;

import java.util.List;

import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;

public class MainActivity extends Activity {

 PackageManager myPackageManager;

 public class MyBaseAdapter extends BaseAdapter {

  private Context myContext;
  private List<ResolveInfo> MyAppList;

  MyBaseAdapter(Context c, List<ResolveInfo> l){
   myContext = c;
   MyAppList = l;
  }

  @Override
  public int getCount() {
   return MyAppList.size();
  }

  @Override
  public Object getItem(int position) {
   return MyAppList.get(position);
  }

  @Override
  public long getItemId(int position) {
   return position;
  }

  @Override
  public View getView(int position, View convertView, ViewGroup parent) {

   ImageView imageView;
   if (convertView == null) {
    // if it's not recycled, initialize some attributes
    imageView = new ImageView(myContext);
    imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    imageView.setPadding(8, 8, 8, 8); 
   } else {
    imageView = (ImageView)convertView; 
   }

   ResolveInfo resolveInfo = MyAppList.get(position);
   imageView.setImageDrawable(resolveInfo.loadIcon(myPackageManager));

   return imageView;

  }

 }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        myPackageManager = getPackageManager();

        Intent intent = new Intent(Intent.ACTION_MAIN, null);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        List<ResolveInfo> intentList = getPackageManager().queryIntentActivities(intent, 0);

        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new MyBaseAdapter(this, intentList));

        gridview.setOnItemClickListener(myOnItemClickListener);
    }

    OnItemClickListener myOnItemClickListener =
      new OnItemClickListener(){

    @Override
    public void onItemClick(AdapterView<?> parent, View view,
      int position, long id) {
     ResolveInfo cleckedResolveInfo = 
       (ResolveInfo)parent.getItemAtPosition(position);
     ActivityInfo clickedActivityInfo = 
       cleckedResolveInfo.activityInfo;

     Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        intent.setClassName(
          clickedActivityInfo.applicationInfo.packageName,
          clickedActivityInfo.name);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | 
          Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
        startActivity(intent);

    }

    };

}

解决方案

Between

List<ResolveInfo> intentList = getPackageManager().queryIntentActivities(intent, 0);

and

gridview.setAdapter(new MyBaseAdapter(this, intentList));

just add a white list filter to remove the unneeded items from intentList.

这篇关于为获取GridView的发射具体应用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆