Example #1
0
 void disableForegroundDispatchInternal(Activity activity, boolean force) {
   try {
     sService.setForegroundDispatch(null, null, null);
     if (!force && !activity.isResumed()) {
       throw new IllegalStateException(
           "You must disable foreground dispatching " + "while your activity is still resumed");
     }
   } catch (RemoteException e) {
     attemptDeadServiceRecovery(e);
   }
 }
Example #2
0
 /**
  * Enable foreground dispatch to the given Activity.
  *
  * <p>This will give give priority to the foreground activity when dispatching a discovered {@link
  * Tag} to an application.
  *
  * <p>If any IntentFilters are provided to this method they are used to match dispatch Intents for
  * both the {@link NfcAdapter#ACTION_NDEF_DISCOVERED} and {@link
  * NfcAdapter#ACTION_TAG_DISCOVERED}. Since {@link NfcAdapter#ACTION_TECH_DISCOVERED} relies on
  * meta data outside of the IntentFilter matching for that dispatch Intent is handled by passing
  * in the tech lists separately. Each first level entry in the tech list represents an array of
  * technologies that must all be present to match. If any of the first level sets match then the
  * dispatch is routed through the given PendingIntent. In other words, the second level is ANDed
  * together and the first level entries are ORed together.
  *
  * <p>If you pass {@code null} for both the {@code filters} and {@code techLists} parameters that
  * acts a wild card and will cause the foreground activity to receive all tags via the {@link
  * NfcAdapter#ACTION_TAG_DISCOVERED} intent.
  *
  * <p>This method must be called from the main thread, and only when the activity is in the
  * foreground (resumed). Also, activities must call {@link #disableForegroundDispatch} before the
  * completion of their {@link Activity#onPause} callback to disable foreground dispatch after it
  * has been enabled.
  *
  * <p class="note">Requires the {@link android.Manifest.permission#NFC} permission.
  *
  * @param activity the Activity to dispatch to
  * @param intent the PendingIntent to start for the dispatch
  * @param filters the IntentFilters to override dispatching for, or null to always dispatch
  * @param techLists the tech lists used to perform matching for dispatching of the {@link
  *     NfcAdapter#ACTION_TECH_DISCOVERED} intent
  * @throws IllegalStateException if the Activity is not currently in the foreground
  */
 public void enableForegroundDispatch(
     Activity activity, PendingIntent intent, IntentFilter[] filters, String[][] techLists) {
   if (activity == null || intent == null) {
     throw new NullPointerException();
   }
   if (!activity.isResumed()) {
     throw new IllegalStateException(
         "Foreground dispatch can only be enabled " + "when your activity is resumed");
   }
   try {
     TechListParcel parcel = null;
     if (techLists != null && techLists.length > 0) {
       parcel = new TechListParcel(techLists);
     }
     ActivityThread.currentActivityThread()
         .registerOnActivityPausedListener(activity, mForegroundDispatchListener);
     sService.setForegroundDispatch(intent, filters, parcel);
   } catch (RemoteException e) {
     attemptDeadServiceRecovery(e);
   }
 }
Example #3
0
 void enforceResumed(Activity activity) {
   if (!activity.isResumed()) {
     throw new IllegalStateException("API cannot be called while activity is paused");
   }
 }