</manifest> queryIntentActivities() QUERY_ALL_PACKAGES <manifest package="com.example.game"> <queries> <intent> <action android:name="android.intent.action.SEND" /> <data android:mimeType="image/jpeg" /> </intent> </queries> </manifest> Android 10 or earlier- an App could query the full list of packages installed on the device which is majority of the use cases is absolutely unnecessary. But with Android 11 that freedom is no longer available. With a new tag called queries, you need to specify in your Android Manifest which apps you might need access to and by the system of least priviledge - only those apps will be visible to your app. Now within this queries tag, you can specify the apps required by either specifying the package name as shown in the code here, or by specifying the intent signature. After specifying these queries, you can use packagemanager method queryIntentActivities to get the apps installed on the device filtered based on the packages or intent in the manifest. So in conclusion, if your app needs to interact with any other app , you need to explicitly mention in manifest file whether its launching any of their activity or starting a service. Now there might be a rare case where you still need to query and interact with all the apps installed on the device - Android 11 has you covered for those cases as well. You need to include a permission called Query All Packages. But this might be useful only in specific limited use cases. If you still want to ensure user privacy, only include the absolute essential apps that you need to interact with in manifest so that your app works appropriately. One thing to note is that you dont need to include an app if you are using implicit intent to interact with it - this is only applicable for explicit intents.