判断Intent是否安全的方法queryIntentActivities的使用

刚看到一篇博文,提到验证是否有APP可以接受一个Intent,这样可以在发送Intent前,避免发送的Intent没有能够接收的APP,导致FC。

因为没有这个习惯~,所以特意试了一下。

核心代码:

PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
boolean isIntentSafe = activities.size() > 0;

写了个小demo来测试。

//add button to response action
bt.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {
                // intent content
                Intent intent = new Intent(Intent.ACTION_DIAL,null);
                PackageManager packageManager = getPackageManager();
                List<ResolveInfo> activitis = packageManager.queryIntentActivities(intent, 0);
                boolean isIntentSafe = activitis.size()>0;
            //Log to show results
            Log.d(TAG,"isIntentSafe:"+isIntentSafe);
            }   
        });

这个方法之前用过,用PackageManager来获取所有APP,所以在知道方法有效的基础上主要试一下哪些Intent可以用来判断,哪些不行。
PS:用PackageManager来获取所有APP:

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

所以只要在AndroidMainfest.xml中注册了intent-filter action的Activity都可以被筛选出来,那些不会被用来注册的功能性的intent就无法被获取,比如action_send,action_view这些。
-That’s all-

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值