diff --git a/core/java/android/companion/CompanionDeviceManager.java b/core/java/android/companion/CompanionDeviceManager.java
index 36802eabe..1568500 100644
--- a/core/java/android/companion/CompanionDeviceManager.java
+++ b/core/java/android/companion/CompanionDeviceManager.java
@@ -780,9 +780,9 @@
     }
 
     /**
-     * Notify the system that the given self-managed association has just 'appeared'.
+     * Notify the system that the given self-managed association has just appeared.
      * This causes the system to bind to the companion app to keep it running until the association
-     * is reported as 'disappeared'
+     * is reported as disappeared
      *
      * <p>This API is only available for the companion apps that manage the connectivity by
      * themselves.</p>
@@ -803,7 +803,7 @@
     }
 
     /**
-     * Notify the system that the given self-managed association has just 'disappeared'.
+     * Notify the system that the given self-managed association has just disappeared.
      * This causes the system to unbind to the companion app.
      *
      * <p>This API is only available for the companion apps that manage the connectivity by
diff --git a/core/java/android/companion/CompanionDeviceService.java b/core/java/android/companion/CompanionDeviceService.java
index cb96ebe..9e1bf4b 100644
--- a/core/java/android/companion/CompanionDeviceService.java
+++ b/core/java/android/companion/CompanionDeviceService.java
@@ -77,10 +77,11 @@
  * {@link #onDeviceAppeared(AssociationInfo)} and {@link #onDeviceDisappeared(AssociationInfo)}
  * only to one "primary" services.
  * Applications that declare multiple {@link CompanionDeviceService}-s should indicate the "primary"
- * service using "android.companion.primary" tag.
+ * service using "android.companion.PROPERTY_PRIMARY_COMPANION_DEVICE_SERVICE" service level
+ * property.
  * <pre>{@code
- * <meta-data
- *       android:name="android.companion.primary"
+ * <property
+ *       android:name="android.companion.PROPERTY_PRIMARY_COMPANION_DEVICE_SERVICE"
  *       android:value="true" />
  * }</pre>
  *
diff --git a/services/companion/java/com/android/server/companion/PackageUtils.java b/services/companion/java/com/android/server/companion/PackageUtils.java
index 818f0cf..a2b2059 100644
--- a/services/companion/java/com/android/server/companion/PackageUtils.java
+++ b/services/companion/java/com/android/server/companion/PackageUtils.java
@@ -18,7 +18,6 @@
 
 import static android.content.pm.PackageManager.FEATURE_COMPANION_DEVICE_SETUP;
 import static android.content.pm.PackageManager.GET_CONFIGURATIONS;
-import static android.content.pm.PackageManager.GET_META_DATA;
 import static android.content.pm.PackageManager.GET_PERMISSIONS;
 
 import static com.android.server.companion.CompanionDeviceManagerService.TAG;
@@ -53,7 +52,8 @@
 final class PackageUtils {
     private static final Intent COMPANION_SERVICE_INTENT =
             new Intent(CompanionDeviceService.SERVICE_INTERFACE);
-    private static final String META_DATA_PRIMARY_TAG = "android.companion.primary";
+    private static final String PROPERTY_PRIMARY_TAG =
+            "android.companion.PROPERTY_PRIMARY_COMPANION_DEVICE_SERVICE";
 
     static @Nullable PackageInfo getPackageInfo(@NonNull Context context,
             @UserIdInt int userId, @NonNull String packageName) {
@@ -84,9 +84,8 @@
     static @NonNull Map<String, List<ComponentName>> getCompanionServicesForUser(
             @NonNull Context context, @UserIdInt int userId) {
         final PackageManager pm = context.getPackageManager();
-        final ResolveInfoFlags flags = ResolveInfoFlags.of(GET_META_DATA);
-        final List<ResolveInfo> companionServices =
-                pm.queryIntentServicesAsUser(COMPANION_SERVICE_INTENT, flags, userId);
+        final List<ResolveInfo> companionServices = pm.queryIntentServicesAsUser(
+                COMPANION_SERVICE_INTENT, ResolveInfoFlags.of(0), userId);
 
         final Map<String, List<ComponentName>> packageNameToServiceInfoList = new HashMap<>();
 
@@ -109,7 +108,8 @@
                             service.packageName, it -> new LinkedList<>());
 
             final ComponentName componentName = service.getComponentName();
-            if (isPrimaryCompanionDeviceService(service)) {
+
+            if (isPrimaryCompanionDeviceService(pm, componentName)) {
                 // "Primary" service should be at the head of the list.
                 services.addFirst(componentName);
             } else {
@@ -120,7 +120,12 @@
         return packageNameToServiceInfoList;
     }
 
-    private static boolean isPrimaryCompanionDeviceService(ServiceInfo service) {
-        return service.metaData != null && service.metaData.getBoolean(META_DATA_PRIMARY_TAG);
+    private static boolean isPrimaryCompanionDeviceService(@NonNull PackageManager pm,
+            @NonNull ComponentName componentName) {
+        try {
+            return pm.getProperty(PROPERTY_PRIMARY_TAG, componentName).getBoolean();
+        } catch (PackageManager.NameNotFoundException e) {
+            return false;
+        }
     }
 }
