Пример #1
0
 /**
  * Returns true when running Android Auto or a car dock.
  *
  * <p>A preferable way of detecting if your app is running in the context of an Android Auto
  * compatible car is by registering a BroadcastReceiver for the action {@link
  * CarHelper#ACTION_MEDIA_STATUS}. See a sample implementation in {@link MusicService#onCreate()}.
  *
  * @param c Context to detect UI Mode.
  * @return true when device is running in car mode, false otherwise.
  */
 public static boolean isCarUiMode(Context c) {
   UiModeManager uiModeManager = (UiModeManager) c.getSystemService(Context.UI_MODE_SERVICE);
   if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_CAR) {
     LogHelper.d(TAG, "Running in Car mode");
     return true;
   } else {
     LogHelper.d(TAG, "Running on a non-Car mode");
     return false;
   }
 }
  public static List<MediaSession.QueueItem> getPlayingQueue(
      String mediaId, MusicProvider musicProvider) {

    // extract the browsing hierarchy from the media ID:
    String[] hierarchy = MediaIDHelper.getHierarchy(mediaId);

    if (hierarchy.length != 2) {
      LogHelper.e(TAG, "Could not build a playing queue for this mediaId: ", mediaId);
      return null;
    }

    String categoryType = hierarchy[0];
    String categoryValue = hierarchy[1];
    LogHelper.d(TAG, "Creating playing queue for ", categoryType, ",  ", categoryValue);

    Iterable<MediaMetadata> tracks = null;
    // This sample only supports genre and by_search category types.
    if (categoryType.equals(MEDIA_ID_MUSICS_BY_GENRE)) {
      tracks = musicProvider.getMusicsByGenre(categoryValue);
    } else if (categoryType.equals(MEDIA_ID_MUSICS_BY_SEARCH)) {
      tracks = musicProvider.searchMusicBySongTitle(categoryValue);
    }

    if (tracks == null) {
      LogHelper.e(TAG, "Unrecognized category type: ", categoryType, " for media ", mediaId);
      return null;
    }

    return convertToQueue(tracks, hierarchy[0], hierarchy[1]);
  }
  public static List<MediaSession.QueueItem> getPlayingQueueFromSearch(
      String query, Bundle queryParams, MusicProvider musicProvider) {

    LogHelper.d(
        TAG, "Creating playing queue for musics from search: ", query, " params=", queryParams);

    VoiceSearchParams params = new VoiceSearchParams(query, queryParams);

    LogHelper.d(TAG, "VoiceSearchParams: ", params);

    if (params.isAny) {
      // If isAny is true, we will play anything. This is app-dependent, and can be,
      // for example, favorite playlists, "I'm feeling lucky", most recent, etc.
      return getRandomQueue(musicProvider);
    }

    Iterable<MediaMetadata> result = null;
    if (params.isAlbumFocus) {
      result = musicProvider.searchMusicByAlbum(params.album);
    } else if (params.isGenreFocus) {
      result = musicProvider.getMusicsByGenre(params.genre);
    } else if (params.isArtistFocus) {
      result = musicProvider.searchMusicByArtist(params.artist);
    } else if (params.isSongFocus) {
      result = musicProvider.searchMusicBySongTitle(params.song);
    }

    // If there was no results using media focus parameter, we do an unstructured query.
    // This is useful when the user is searching for something that looks like an artist
    // to Google, for example, but is not. For example, a user searching for Madonna on
    // a PodCast application wouldn't get results if we only looked at the
    // Artist (podcast author). Then, we can instead do an unstructured search.
    if (params.isUnstructured || result == null || !result.iterator().hasNext()) {
      // To keep it simple for this example, we do unstructured searches on the
      // song title only. A real world application could search on other fields as well.
      result = musicProvider.searchMusicBySongTitle(query);
    }

    return convertToQueue(result, MEDIA_ID_MUSICS_BY_SEARCH, query);
  }
  /**
   * Create a random queue.
   *
   * @param musicProvider the provider used for fetching music.
   * @return list containing {@link MediaSession.QueueItem}'s
   */
  public static List<MediaSession.QueueItem> getRandomQueue(MusicProvider musicProvider) {
    List<MediaMetadata> result = new ArrayList<>();

    for (String genre : musicProvider.getGenres()) {
      Iterable<MediaMetadata> tracks = musicProvider.getMusicsByGenre(genre);
      for (MediaMetadata track : tracks) {
        if (ThreadLocalRandom.current().nextBoolean()) {
          result.add(track);
        }
      }
    }
    LogHelper.d(TAG, "getRandomQueue: result.size=", result.size());

    Collections.shuffle(result);

    return convertToQueue(result, MEDIA_ID_MUSICS_BY_SEARCH, "random");
  }
Пример #5
0
  @Override
  public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    /*  int flag =  Settings.System.getInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 5);
    LogHelper.d(TAG+" flag "+flag);

    Settings.System.putInt(getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 1);

    Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
    intent.putExtra("state", true);
    sendBroadcast(intent);*/
    // Intent startServiceIntent = new Intent(this,TimerService.class);
    // startService(startServiceIntent);
    LogHelper.d(TAG + SystemClock.elapsedRealtime());
  }