类androidx.annotation.RequiresApi源码实例Demo

下面列出了怎么用androidx.annotation.RequiresApi的API类实例代码及写法,或者点击链接到github查看源代码。

@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
public AddBeaconChoicePreferenceDummy(Context context, Fragment fragment) {
    super(context);
    setKey(DUMMY);
    setIcon(android.R.drawable.ic_menu_add);
    setTitle(R.string.add_beacon_title);
    setSummary(R.string.add_beacon_summary);
    setOnPreferenceClickListener(prefs -> {
        BluetoothManager bluetoothManager = (BluetoothManager) getContext().getSystemService(Context.BLUETOOTH_SERVICE);
        if (bluetoothManager == null) {
            HyperLog.w(TAG, "Unable to get bluetooth manager");
        } else {
            BluetoothAdapter bluetoothAdapter = bluetoothManager.getAdapter();
            if (bluetoothAdapter == null || !bluetoothAdapter.isEnabled()) {
                Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
                fragment.startActivityForResult(enableBtIntent, ON_DEMAND_BLUETOOTH_REQUEST_CODE);
                return true;
            }
        }
        BeaconScanDialogFragment instance = getInstance(getContext(), this::onScanResult,
                getSharedPreferences().getStringSet(BEACON_LIST, Collections.emptySet()));
        instance.show(fragment.requireFragmentManager(), null);
        return true;
    });
}
 
源代码2 项目: mollyim-android   文件: DoNotDisturbUtil.java
@RequiresApi(23)
private static boolean handlePriority(@NonNull Context context, @NonNull NotificationManager notificationManager, @NonNull Recipient recipient) {
  if (Build.VERSION.SDK_INT < 28 && !notificationManager.isNotificationPolicyAccessGranted()) {
    Log.w(TAG, "Notification Policy is not granted");
    return true;
  }

  final NotificationManager.Policy policy                = notificationManager.getNotificationPolicy();
  final boolean                    areCallsPrioritized   = (policy.priorityCategories & NotificationManager.Policy.PRIORITY_CATEGORY_CALLS) != 0;
  final boolean                    isRepeatCallerEnabled = (policy.priorityCategories & NotificationManager.Policy.PRIORITY_CATEGORY_REPEAT_CALLERS) != 0;

  if (!areCallsPrioritized && !isRepeatCallerEnabled) {
    return false;
  }

  if (areCallsPrioritized && !isRepeatCallerEnabled) {
    return isContactPriority(context, recipient, policy.priorityCallSenders);
  }

  if (!areCallsPrioritized) {
    return isRepeatCaller(context, recipient);
  }

  return isContactPriority(context, recipient, policy.priorityCallSenders) || isRepeatCaller(context, recipient);
}
 
源代码3 项目: mollyim-android   文件: KeyStoreHelper.java
@RequiresApi(Build.VERSION_CODES.M)
public static SealedData seal(@NonNull byte[] input) {
  SecretKey secretKey = getOrCreateKeyStoreEntry();

  try {
    Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
    cipher.init(Cipher.ENCRYPT_MODE, secretKey);

    byte[] iv   = cipher.getIV();
    byte[] data = cipher.doFinal(input);

    return new SealedData(iv, data);
  } catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | IllegalBlockSizeException | BadPaddingException e) {
    throw new AssertionError(e);
  }
}
 
源代码4 项目: Twire   文件: StreamActivity.java
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private TransitionSet constructTransitions() {
    int[] slideTargets = {R.id.ChatRecyclerView, R.id.chat_input, R.id.chat_input_divider};

    Transition slideTransition = new Slide(Gravity.BOTTOM);
    Transition fadeTransition = new Fade();

    for (int slideTarget : slideTargets) {
        slideTransition.addTarget(slideTarget);
        fadeTransition.excludeTarget(slideTarget, true);
    }

    TransitionSet set = new TransitionSet();
    set.addTransition(slideTransition);
    set.addTransition(fadeTransition);
    return set;
}
 
源代码5 项目: mollyim-android   文件: KeyStoreHelper.java
@RequiresApi(Build.VERSION_CODES.M)
private static SecretKey getKeyStoreEntry() {
  KeyStore keyStore = getKeyStore();

  try {
    // Attempt 1
    return getSecretKey(keyStore);
  } catch (UnrecoverableKeyException e) {
    try {
      // Attempt 2
      return getSecretKey(keyStore);
    } catch (UnrecoverableKeyException e2) {
      throw new AssertionError(e2);
    }
  }
}
 
源代码6 项目: mollyim-android   文件: CameraXUtil.java
@RequiresApi(21)
public static int getLowestSupportedHardwareLevel(@NonNull Context context) {
  @SuppressLint("RestrictedApi") CameraManager cameraManager = CameraManagerCompat.from(context).unwrap();

  try {
    int supported = maxHardwareLevel();

    for (String cameraId : cameraManager.getCameraIdList()) {
      CameraCharacteristics characteristics = cameraManager.getCameraCharacteristics(cameraId);
      Integer               hwLevel         = characteristics.get(CameraCharacteristics.INFO_SUPPORTED_HARDWARE_LEVEL);

      if (hwLevel == null || hwLevel == CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY) {
        return CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY;
      }

      supported = smallerHardwareLevel(supported, hwLevel);
    }

    return supported;
  } catch (CameraAccessException e) {
    Log.w(TAG, "Failed to enumerate cameras", e);

    return CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY;
  }
}
 
源代码7 项目: Cake-VPN   文件: OpenVPNService.java
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
private void addVpnActionsToNotification(Notification.Builder nbuilder) {
    Intent disconnectVPN = new Intent(this, DisconnectVPNActivity.class);
    disconnectVPN.setAction(DISCONNECT_VPN);
    PendingIntent disconnectPendingIntent = PendingIntent.getActivity(this, 0, disconnectVPN, 0);

    nbuilder.addAction(R.drawable.ic_menu_close_clear_cancel,
            getString(R.string.cancel_connection), disconnectPendingIntent);

    Intent pauseVPN = new Intent(this, OpenVPNService.class);
    if (mDeviceStateReceiver == null || !mDeviceStateReceiver.isUserPaused()) {
        pauseVPN.setAction(PAUSE_VPN);
        PendingIntent pauseVPNPending = PendingIntent.getService(this, 0, pauseVPN, 0);
        nbuilder.addAction(R.drawable.ic_menu_pause,
                getString(R.string.pauseVPN), pauseVPNPending);

    } else {
        pauseVPN.setAction(RESUME_VPN);
        PendingIntent resumeVPNPending = PendingIntent.getService(this, 0, pauseVPN, 0);
        nbuilder.addAction(R.drawable.ic_menu_play,
                getString(R.string.resumevpn), resumeVPNPending);
    }
}
 
源代码8 项目: mollyim-android   文件: VideoTrackConverter.java
@RequiresApi(23)
static @Nullable VideoTrackConverter create(
        final @NonNull MediaInput input,
        final long timeFrom,
        final long timeTo,
        final int videoResolution,
        final int videoBitrate,
        final @NonNull String videoCodec) throws IOException, TranscodingException {

    final MediaExtractor videoExtractor = input.createExtractor();
    final int videoInputTrack = getAndSelectVideoTrackIndex(videoExtractor);
    if (videoInputTrack == -1) {
        videoExtractor.release();
        return null;
    }
    return new VideoTrackConverter(videoExtractor, videoInputTrack, timeFrom, timeTo, videoResolution, videoBitrate, videoCodec);
}
 
源代码9 项目: MediaSDK   文件: AudioFocusManager.java
@RequiresApi(26)
private int requestAudioFocusV26() {
  if (audioFocusRequest == null || rebuildAudioFocusRequest) {
    AudioFocusRequest.Builder builder =
        audioFocusRequest == null
            ? new AudioFocusRequest.Builder(focusGain)
            : new AudioFocusRequest.Builder(audioFocusRequest);

    boolean willPauseWhenDucked = willPauseWhenDucked();
    audioFocusRequest =
        builder
            .setAudioAttributes(Assertions.checkNotNull(audioAttributes).getAudioAttributesV21())
            .setWillPauseWhenDucked(willPauseWhenDucked)
            .setOnAudioFocusChangeListener(focusListener)
            .build();

    rebuildAudioFocusRequest = false;
  }
  return audioManager.requestAudioFocus(audioFocusRequest);
}
 
源代码10 项目: a   文件: ImmersionBar.java
/**
 * 初始化android 5.0以上状态栏和导航栏
 *
 * @param uiFlags the ui flags
 * @return the int
 */
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private int initBarAboveLOLLIPOP(int uiFlags) {
    uiFlags |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;  //Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态栏遮住。
    if (mBarParams.fullScreen && mBarParams.navigationBarEnable) {
        uiFlags |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; //Activity全屏显示,但导航栏不会被隐藏覆盖,导航栏依然可见,Activity底部布局部分会被导航栏遮住。
    }
    mWindow.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    if (mConfig.hasNavigtionBar()) {  //判断是否存在导航栏
        mWindow.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    }
    mWindow.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);  //需要设置这个才能设置状态栏颜色
    if (mBarParams.statusBarFlag)
        mWindow.setStatusBarColor(ColorUtils.blendARGB(mBarParams.statusBarColor,
                mBarParams.statusBarColorTransform, mBarParams.statusBarAlpha));  //设置状态栏颜色
    else
        mWindow.setStatusBarColor(ColorUtils.blendARGB(mBarParams.statusBarColor,
                Color.TRANSPARENT, mBarParams.statusBarAlpha));  //设置状态栏颜色
    if (mBarParams.navigationBarEnable) {
        mWindow.setNavigationBarColor(ColorUtils.blendARGB(mBarParams.navigationBarColor,
                mBarParams.navigationBarColorTransform, mBarParams.navigationBarAlpha));  //设置导航栏颜色
        if (Build.VERSION.SDK_INT >= 28 && !mBarParams.navigationBarDivider)
                mWindow.setNavigationBarDividerColor(Color.TRANSPARENT);
    }
    return uiFlags;
}
 
源代码11 项目: Twire   文件: StreamActivity.java
@Override
@RequiresApi(24)
public void onUserLeaveHint() {
       super.onUserLeaveHint();

       if (getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)) {
           mStreamFragment.prePictureInPicture();
           enterPictureInPictureMode();
       }
}
 
源代码12 项目: MHViewer   文件: SetSecurityActivity.java
@RequiresApi(api = Build.VERSION_CODES.M)
public static boolean hasEnrolledFingerprints(FingerprintManager fingerprintManager) {
    try {
        return fingerprintManager.isHardwareDetected()
            && fingerprintManager.hasEnrolledFingerprints();
    } catch (Throwable e) {
        return false;
    }
}
 
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
private void onScanResult(@Nullable Beacon beacon) {
    if (beacon == null) {
        return;
    }
    BeaconManager.getInstance().addBeacon(getContext(), beacon);
}
 
源代码14 项目: mollyim-android   文件: BlobProvider.java
@RequiresApi(23)
public synchronized @NonNull MediaDataSource getMediaDataSource(@NonNull Context context, @NonNull Uri uri) throws IOException {
  return getBlobRepresentation(context,
                               uri,
                               ByteArrayMediaDataSource::new,
                               file -> EncryptedMediaDataSource.createForDiskBlob(getAttachmentSecret(context), file));
}
 
源代码15 项目: mollyim-android   文件: AttachmentDatabase.java
@RequiresApi(23)
public @Nullable MediaDataSource mediaDataSourceFor(@NonNull AttachmentId attachmentId) {
  DataInfo dataInfo = getAttachmentDataFileInfo(attachmentId, DATA);

  if (dataInfo == null) {
    Log.w(TAG, "No data file found for video attachment...");
    return null;
  }

  return EncryptedMediaDataSource.createFor(attachmentSecret, dataInfo.file, dataInfo.random, dataInfo.length);
}
 
@RequiresApi(Build.VERSION_CODES.O)
private void createNotificationChannel() {
	CharSequence channelNameDisplayedToUser = "Notification Bar Video Controls";
	int importance = NotificationManager.IMPORTANCE_LOW;
	mNotificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID,
												   channelNameDisplayedToUser,
												   importance);
	mNotificationChannel.setDescription("All notifications");
	mNotificationChannel.setShowBadge(false);
	mNotificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
	mNotificationManager.createNotificationChannel(mNotificationChannel);
}
 
源代码17 项目: leafpicrevived   文件: FingerPrint.java
@RequiresApi(api = Build.VERSION_CODES.M)
public static boolean checkFinger(Context ctx) {

    // Keyguard Manager
    KeyguardManager keyguardManager = (KeyguardManager) ctx.getSystemService(KEYGUARD_SERVICE);
    // Fingerprint Manager
    FingerprintManager fingerprintManager = (FingerprintManager) ctx.getSystemService(FINGERPRINT_SERVICE);

    try {
        // Check if the fingerprint sensor is present
        if (!fingerprintManager.isHardwareDetected()) {
            // Update the UI with a message
            StringUtils.showToast(ctx, ctx.getString(R.string.fp_not_supported));
            return false;
        }

        if (!fingerprintManager.hasEnrolledFingerprints()) {
            StringUtils.showToast(ctx, ctx.getString(R.string.fp_not_configured));
            return false;
        }

        if (!keyguardManager.isKeyguardSecure()) {
            StringUtils.showToast(ctx, ctx.getString(R.string.fp_not_enabled_sls));
            return false;
        }
    } catch (SecurityException se) {
        se.printStackTrace();
    }
    return true;
}
 
源代码18 项目: mollyim-android   文件: KeyStoreHelper.java
@RequiresApi(Build.VERSION_CODES.M)
private static boolean hasKeyStoreEntry() {
  try {
    KeyStore ks = KeyStore.getInstance(ANDROID_KEY_STORE);
    ks.load(null);

    return ks.containsAlias(KEY_ALIAS) && ks.entryInstanceOf(KEY_ALIAS, KeyStore.SecretKeyEntry.class);
  } catch (KeyStoreException | IOException | NoSuchAlgorithmException | CertificateException e) {
    throw new AssertionError(e);
  }
}
 
源代码19 项目: mollyim-android   文件: KeyStoreHelper.java
@RequiresApi(Build.VERSION_CODES.M)
public static SecretKey createKeyStoreEntryHmac() {
  try {
    KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_HMAC_SHA256, ANDROID_KEY_STORE);

    KeyGenParameterSpec.Builder keySpecBuilder = new KeyGenParameterSpec.Builder(KEY_ALIAS_HMAC, KeyProperties.PURPOSE_SIGN);
    KeyGenParameterSpec keyGenParameterSpec = keySpecBuilder.build();

    keyGenerator.init(keyGenParameterSpec);

    return keyGenerator.generateKey();
  } catch (NoSuchAlgorithmException | NoSuchProviderException | InvalidAlgorithmParameterException e) {
    throw new AssertionError(e);
  }
}
 
源代码20 项目: mollyim-android   文件: KeyStoreHelper.java
@RequiresApi(Build.VERSION_CODES.M)
public static SecretKey getKeyStoreEntryHmac() throws UnrecoverableEntryException {
  try {
    KeyStore keyStore = KeyStore.getInstance(ANDROID_KEY_STORE);
    keyStore.load(null);

    return ((KeyStore.SecretKeyEntry) keyStore.getEntry(KEY_ALIAS_HMAC, null)).getSecretKey();
  } catch (KeyStoreException | IOException | NoSuchAlgorithmException | CertificateException e) {
    throw new AssertionError(e);
  }
}
 
源代码21 项目: privatelocation   文件: MainActivity.java
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
    Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl());
    view.getContext().startActivity(intent);
    return true;
}
 
源代码22 项目: mollyim-android   文件: JobSchedulerScheduler.java
@RequiresApi(26)
@Override
public void schedule(long delay, @NonNull List<Constraint> constraints) {
  JobInfo.Builder jobInfoBuilder = new JobInfo.Builder(getNextId(), new ComponentName(application, SystemService.class))
                                              .setMinimumLatency(delay)
                                              .setPersisted(true);

  for (Constraint constraint : constraints) {
    constraint.applyToJobInfo(jobInfoBuilder);
  }

  Log.i(TAG, "Scheduling a run in " + delay + " ms.");
  JobScheduler jobScheduler = application.getSystemService(JobScheduler.class);
  jobScheduler.schedule(jobInfoBuilder.build());
}
 
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
    String url = request.getUrl().toString().toLowerCase();
    if (!hasAdUrl(url)) {
        //正常加载
        return super.shouldInterceptRequest(view, request);
    } else {
        //含有广告资源屏蔽请求
        return new WebResourceResponse(null, null, null);
    }
}
 
源代码24 项目: mollyim-android   文件: CameraXUtil.java
@RequiresApi(21)
private static boolean shouldCropImage(@NonNull ImageProxy image) {
  Size sourceSize = new Size(image.getWidth(), image.getHeight());
  Size targetSize = new Size(image.getCropRect().width(), image.getCropRect().height());

  return !targetSize.equals(sourceSize);
}
 
源代码25 项目: mollyim-android   文件: CameraXUtil.java
@RequiresApi(21)
private static int smallerHardwareLevel(int levelA, int levelB) {

  int[] hardwareInfoOrdering = getHardwareInfoOrdering();
  for (int hwInfo : hardwareInfoOrdering) {
    if (levelA == hwInfo || levelB == hwInfo) return hwInfo;
  }

  return CameraMetadata.INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY;
}
 
源代码26 项目: mollyim-android   文件: CameraXModule.java
@RequiresApi(26)
// End Signal Custom Code Block
public void stopRecording() {
  if (mVideoCapture == null) {
    return;
  }

  mVideoCapture.stopRecording();
}
 
源代码27 项目: mollyim-android   文件: CameraXView.java
/**
 * Takes a video and calls the OnVideoSavedCallback when done.
 *
 * @param file     The destination.
 * @param executor The executor in which the callback methods will be run.
 * @param callback Callback which will receive success or failure.
 */
// Begin Signal Custom Code Block
@RequiresApi(26)
// End Signal Custom Code Block
public void startRecording(// Begin Signal Custom Code Block
                           @NonNull FileDescriptor file,
                           // End Signal Custom Code Block
                           @NonNull Executor executor,
                           @NonNull VideoCapture.OnVideoSavedCallback callback) {
  mCameraModule.startRecording(file, executor, callback);
}
 
源代码28 项目: mollyim-android   文件: CameraXView.java
/** Stops an in progress video. */
// Begin Signal Custom Code Block
@RequiresApi(26)
// End Signal Custom Code Block
public void stopRecording() {
  mCameraModule.stopRecording();
}
 
源代码29 项目: mollyim-android   文件: FcmJobService.java
@RequiresApi(26)
public static void schedule(@NonNull Context context) {
  JobInfo.Builder jobInfoBuilder = new JobInfo.Builder(ID, new ComponentName(context, FcmJobService.class))
                                              .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
                                              .setBackoffCriteria(0, JobInfo.BACKOFF_POLICY_LINEAR)
                                              .setPersisted(true);

  ServiceUtil.getJobScheduler(context).schedule(jobInfoBuilder.build());
}
 
源代码30 项目: Cake-VPN   文件: X509Utils.java
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
public static String getCertificateFriendlyName(X509Certificate cert) {
    X500Principal principal = cert.getSubjectX500Principal();
    byte[] encodedSubject = principal.getEncoded();
    String friendlyName = null;
    /* Hack so we do not have to ship a whole Spongy/bouncycastle */
    Exception exp = null;
    try {
        Class X509NameClass = Class.forName("com.android.org.bouncycastle.asn1.x509.X509Name");
        Method getInstance = X509NameClass.getMethod("getInstance", Object.class);
        Hashtable defaultSymbols = (Hashtable) X509NameClass.getField("DefaultSymbols").get(X509NameClass);
        if (!defaultSymbols.containsKey("1.2.840.113549.1.9.1")) defaultSymbols.put("1.2.840.113549.1.9.1", "eMail");
        Object subjectName = getInstance.invoke(X509NameClass, encodedSubject);
        Method toString = X509NameClass.getMethod("toString", boolean.class, Hashtable.class);
        friendlyName = (String) toString.invoke(subjectName, true, defaultSymbols);
    } catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException | IllegalAccessException | NoSuchFieldException e) {
        exp = e;
    }
    if (exp != null) VpnStatus.logException("Getting X509 Name from certificate", exp);
    /* Fallback if the reflection method did not work */
    if (friendlyName == null) friendlyName = principal.getName();
    // Really evil hack to decode email address
    // See: http://code.google.com/p/android/issues/detail?id=21531
    String[] parts = friendlyName.split(",");
    for (int i = 0; i < parts.length; i++) {
        String part = parts[i];
        if (part.startsWith("1.2.840.113549.1.9.1=#16")) {
            parts[i] = "email=" + ia5decode(part.replace("1.2.840.113549.1.9.1=#16", ""));
        }
    }
    friendlyName = TextUtils.join(",", parts);
    return friendlyName;
}