判斷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-

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章