为获取GridView的发射具体应用 [英] Getting Specific Apps for gridview launcher
问题描述
我学习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屋!