diff --git a/tests/src/com/android/server/telecom/tests/AnalyticsTests.java b/tests/src/com/android/server/telecom/tests/AnalyticsTests.java
index 2271460..1c786e5 100644
--- a/tests/src/com/android/server/telecom/tests/AnalyticsTests.java
+++ b/tests/src/com/android/server/telecom/tests/AnalyticsTests.java
@@ -27,6 +27,7 @@
 import android.telecom.TelecomManager;
 import android.telecom.VideoCallImpl;
 import android.telecom.VideoProfile;
+import android.support.test.filters.FlakyTest;
 import android.test.suitebuilder.annotation.MediumTest;
 import android.test.suitebuilder.annotation.SmallTest;
 import android.util.Base64;
@@ -92,6 +93,7 @@
         }
     }
 
+    @FlakyTest
     @MediumTest
     public void testAnalyticsDumping() throws Exception {
         Analytics.reset();
diff --git a/tests/src/com/android/server/telecom/tests/BasicCallTests.java b/tests/src/com/android/server/telecom/tests/BasicCallTests.java
index f82dfd3..ce774a7 100644
--- a/tests/src/com/android/server/telecom/tests/BasicCallTests.java
+++ b/tests/src/com/android/server/telecom/tests/BasicCallTests.java
@@ -47,6 +47,7 @@
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
 import android.telecom.VideoProfile;
+import android.support.test.filters.FlakyTest;
 import android.test.suitebuilder.annotation.LargeTest;
 import android.test.suitebuilder.annotation.MediumTest;
 
@@ -874,6 +875,7 @@
      * then subsequently selects a PhoneAccount which does not support video calling.
      * @throws Exception
      */
+    @FlakyTest
     @LargeTest
     public void testOutgoingCallSelectPhoneAccountNoVideo() throws Exception {
         startOutgoingPhoneCallPendingCreateConnection("650-555-1212",
diff --git a/tests/src/com/android/server/telecom/tests/MissedCallNotifierImplTest.java b/tests/src/com/android/server/telecom/tests/MissedCallNotifierImplTest.java
index e031814..950cb2c 100644
--- a/tests/src/com/android/server/telecom/tests/MissedCallNotifierImplTest.java
+++ b/tests/src/com/android/server/telecom/tests/MissedCallNotifierImplTest.java
@@ -207,7 +207,7 @@
 
         ArgumentCaptor<Integer> requestIdCaptor = ArgumentCaptor.forClass(
                 Integer.class);
-        verify(mNotificationManager, times(2)).notifyAsUser(isNull(String.class),
+        verify(mNotificationManager, times(2)).notifyAsUser(nullable(String.class),
                 requestIdCaptor.capture(), nullable(Notification.class), eq(userHandle));
         verify(mNotificationManager).cancelAsUser(nullable(String.class),
                 eq(requestIdCaptor.getValue()), eq(userHandle));
@@ -245,7 +245,7 @@
         // to notifyAsUser are the versions which contain sensitive information.
         ArgumentCaptor<Notification> notificationArgumentCaptor = ArgumentCaptor.forClass(
                 Notification.class);
-        verify(mNotificationManager, times(2)).notifyAsUser(isNull(String.class), eq(1),
+        verify(mNotificationManager, times(2)).notifyAsUser(nullable(String.class), eq(1),
                 notificationArgumentCaptor.capture(), eq(PRIMARY_USER));
         HashSet<String> privateNotifications = new HashSet<>();
         for (Notification n : notificationArgumentCaptor.getAllValues()) {
@@ -332,7 +332,7 @@
         } else {
             expectedUserHandle = phoneAccount.getAccountHandle().getUserHandle();
         }
-        verify(mNotificationManager).notifyAsUser(isNull(String.class), eq(1),
+        verify(mNotificationManager).notifyAsUser(nullable(String.class), eq(1),
                 notificationArgumentCaptor.capture(), eq((expectedUserHandle)));
 
         Notification.Builder builder;
@@ -534,7 +534,7 @@
         listenerCaptor.getAllValues().get(1).onCallerInfoQueryComplete(escapedSipHandle, ci);
 
         // Verify that two notifications were generated, both with the same id.
-        verify(mNotificationManager, times(2)).notifyAsUser(isNull(String.class), eq(1),
+        verify(mNotificationManager, times(2)).notifyAsUser(nullable(String.class), eq(1),
                 nullable(Notification.class), eq(PRIMARY_USER));
     }
 
diff --git a/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java b/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java
index b23664d..ad262f1 100644
--- a/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java
+++ b/tests/src/com/android/server/telecom/tests/NewOutgoingCallIntentBroadcasterTest.java
@@ -405,7 +405,8 @@
 
         Intent capturedIntent = intentCaptor.getValue();
         assertEquals(Intent.ACTION_NEW_OUTGOING_CALL, capturedIntent.getAction());
-        assertEquals(Intent.FLAG_RECEIVER_FOREGROUND, capturedIntent.getFlags());
+        assertEquals(Intent.FLAG_RECEIVER_FOREGROUND | Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND,
+                capturedIntent.getFlags());
         assertTrue(areBundlesEqual(expectedExtras, capturedIntent.getExtras()));
 
         BroadcastReceiver receiver = receiverCaptor.getValue();
