您的位置:首页 > 产品设计 > UI/UE

PackageManager 的queryIntentActivities方法---获取AndroidMainfest.xml中注册了intent-filter action的Activity都可以被

2018-01-03 16:05 561 查看
一般APP的manifest里面要设置为launcher的activity总是要设置intent-filter:

 

<intent-filter>  

                <action android:name="android.intent.action.MAIN" />  

                <category android:name="android.intent.category.LAUNCHER" />  

</intent-filter>

可以通过queryIntentActivities来获得有哪些launcher:

 

private void loadApps() {           

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

        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);             

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

    }

我们可以在自己的app上用一个gridview显示出当前手机有哪些app:

 

 

import java.util.List;       

import android.app.Activity;   

import android.content.Intent;   

import android.content.pm.ResolveInfo;   

import android.os.Bundle;   

import android.view.View;   

import android.view.ViewGroup;   

import android.widget.BaseAdapter;   

import android.widget.GridView;   

import android.widget.ImageView;       

public class MyHome extends Activity   

{         

    GridView mGrid;             

     

    @Override    

   public void onCreate(Bundle savedInstanceState) {           

        super.onCreate(savedInstanceState);                     

        loadApps();           

        setContentView(R.layout.main);           

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

        mGrid.setAdapter(new AppsAdapter());       

    }        

           

    private List<ResolveInfo> mApps;  

         

    private void loadApps() {           

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

        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);              

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

    }    

       

    public class AppsAdapter extends BaseAdapter   

    {           

        public AppsAdapter() {         }               

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

            ImageView i;                   

            if (convertView == null) {                   

                i = new ImageView(MyHome.this);                   

                i.setScaleType(ImageView.ScaleType.FIT_CENTER);                   

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

            } else {                   

                i = (ImageView) convertView;               

            }                   

            ResolveInfo info = mApps.get(position);              

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

            return i;           

        }                   

        public final int getCount() {              

            return mApps.size();           

        }               

        public final Object getItem(int position) {               

            return mApps.get(position);           

        }               

        public final long getItemId(int position) {               

            return position;           

        }       

    }   

}

 

可以设置点击监听器去开启app:

 

 

@Override 

public void onItemClick(AdapterView<?> parent, View view, int position,long id) {            

    ResolveInfo info = mApps.get(position);                          

    //该应用的包名            

    String pkg = info.activityInfo.packageName;               

    //应用的主activity类            

    String cls = info.activityInfo.name;                           

    ComponentName componet = new ComponentName(pkg, cls);                          

    Intent i = new Intent();              

    i.setComponent(componet);              

    startActivity(i);          

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