kohant 2014-09-26 08:50
浏览 1317

Android如何根据包名加载指定应用

楼主想实现一个加载指定应用到gridview上,从网上参考了别人的代码然后改来改去都没能成功,楼主是初学者,java和android都比较薄弱,求各大侠能指点一下loadapps那一段代码要怎么写( ⊙o⊙ )

public class Appinfo extends Activity {
private List mApps;
GridView mGrid;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    loadApps();
    setContentView(R.layout.appinfo);
    mGrid = (GridView) findViewById(R.id.myListView1);
    mGrid.setAdapter(new AppsAdapter());

    mGrid.setOnItemClickListener(listener);
}

private OnItemClickListener listener= new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        // TODO Auto-generated method stub
        ResolveInfo info = mApps.get(position);         
    String pkg = info.activityInfo.packageName;         
           Uri uri = Uri.fromParts("package", pkg, null);
        Intent it = new Intent(Intent.ACTION_DELETE, uri);
           startActivity(it);

    }

};

private void loadApps() {
    List<ResolveInfo> mAppstr;

    Intent mainIntent = new Intent(Intent.ACTION_MAIN,null);
    mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);   
   mAppstr = getPackageManager().queryIntentActivities(mainIntent, 0);

    if (!mAppstr.isEmpty()) {
        List<Intent> targetedShareIntents = new ArrayList<Intent>();
        for (ResolveInfo info : mAppstr) {
            Intent targeted = new Intent(Intent.ACTION_MAIN,null);

            ActivityInfo activityInfo = info.activityInfo;

            // judgments : activityInfo.packageName, activityInfo.name, etc.
            if (activityInfo.packageName.contains("com.xx") ||activityInfo.name.contains("com.xx")) {
                 targeted.setPackage(activityInfo.packageName);
                targetedShareIntents.add(targeted);
            }
           mApps = getPackageManager().queryIntentActivities(targetedShareIntents, 0);

        }}
}   

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

public class AppsAdapter extends BaseAdapter{

    @Override
    public final int getCount() {
        // TODO Auto-generated method stub
        return mApps.size();    
    }

    @Override
    public final Object getItem(int position) {
        // TODO Auto-generated method stub
        return mApps.get(position);
    }

    @Override
    public final long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) { 
        // TODO Auto-generated method stub
        ImageView i;
        if(convertView == null){
            i = new ImageView(Appinfo.this);
            i.setScaleType(ImageView.ScaleType.FIT_CENTER);
            i.setLayoutParams(new GridView.LayoutParams(100,100));
        }
        else {
            i =(ImageView) convertView;
        }
        ResolveInfo info = mApps.get(position);
        i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));

        return i;
    }


}

}

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!
    • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
    • ¥15 求daily translation(DT)偏差订正方法的代码
    • ¥15 js调用html页面需要隐藏某个按钮
    • ¥15 ads仿真结果在圆图上是怎么读数的
    • ¥20 Cotex M3的调试和程序执行方式是什么样的?
    • ¥20 java项目连接sqlserver时报ssl相关错误
    • ¥15 一道python难题3
    • ¥15 牛顿斯科特系数表表示