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

一般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);          

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android系统PackageManager(包管理器)是一个系统级别的服务,它是一个应用程序包的管理器,可以用来安装、卸载、查询应用程序包信息等操作。PackageManager API是Android系统非常重要的一个API,它可以让开发者获取应用程序包的信息,比如版本号、权限等等。 常用的PackageManager命令有: 1. 查询已安装应用的信息 ``` pm list packages // 列出所有已安装的应用的包名 pm list packages -s // 列出所有已安装的系统应用的包名 pm list packages -3 // 列出所有已安装的第三方应用的包名 pm list packages -f // 列出所有已安装应用的APK路径 pm list packages -d // 只列出已禁用的应用 pm list packages -e // 只列出系统已启用的应用 ``` 2. 安装应用 ``` pm install /path/to/app.apk // 安装应用 pm install -r /path/to/app.apk // 重新安装应用,保留应用数据 pm install -t /path/to/app.apk // 允许安装覆盖其他应用 pm install -i <installer_package_name> /path/to/app.apk // 指定应用安装包的安装来源 ``` 3. 卸载应用 ``` pm uninstall com.package.name // 卸载应用 pm uninstall -k com.package.name // 卸载应用,保留应用数据和缓存 ``` 4. 查询应用信息 ``` pm dump com.package.name // 输出应用信息 pm path com.package.name // 输出应用APK路径 pm list features // 列出系统支持的特性 pm list instrumentation // 列出所有已安装的Instrumentation ``` 5. 其他命令 ``` pm enable com.package.name // 启用应用 pm disable com.package.name // 禁用应用 pm clear com.package.name // 清除应用数据和缓存 ``` 以上是一些常用的PackageManager命令,使用时需要注意权限问题,部分命令需要root权限才能执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值