类android.media.session.MediaController源码实例Demo

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

源代码1 项目: scroball   文件: ListenerService.java
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
  if (key.startsWith("player.")) {
    final String packageName = key.substring(7);

    if (sharedPreferences.getBoolean(key, true)) {
      Log.d(TAG, "Player enabled, re-registering callbacks");
      onActiveSessionsChanged(mediaControllers);
    } else {
      Log.d(TAG, "Player disabled, stopping any current tracking");
      final Optional<MediaController> optionalController =
          Iterables.tryFind(
              mediaControllers, input -> input.getPackageName().equals(packageName));

      if (optionalController.isPresent()
          && controllerCallbacks.containsKey(optionalController.get())) {
        MediaController controller = optionalController.get();
        controller.unregisterCallback(controllerCallbacks.get(controller));
        playbackTracker.handleSessionTermination(controller.getPackageName());
        controllerCallbacks.remove(controller);
      }
    }
  }
}
 
源代码2 项目: Easer   文件: MediaControlLoader.java
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
private boolean handleOnApi21(@ValidData @NonNull MediaControlOperationData data) {
    int keyCode = toKeyCode(data.choice);
    KeyEvent keyEvent_down = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode);
    KeyEvent keyEvent_up = new KeyEvent(KeyEvent.ACTION_UP, keyCode);
    ComponentName myNotificationListenerComponent = new ComponentName(context, MediaControlHelperNotificationListenerService.class);
    MediaSessionManager mediaSessionManager = ((MediaSessionManager) context.getSystemService(Context.MEDIA_SESSION_SERVICE));
    if (mediaSessionManager == null) {
        Logger.e("MediaSessionManager is null.");
        return false;
    }
    List<MediaController> activeSessions = mediaSessionManager.getActiveSessions(myNotificationListenerComponent);
    if (activeSessions.size() > 0) {
        MediaController mediaController = activeSessions.get(0);
        mediaController.dispatchMediaButtonEvent(keyEvent_down);
        mediaController.dispatchMediaButtonEvent(keyEvent_up);
    }
    return true;
}
 
源代码3 项目: PodEmu   文件: MediaPlayback.java
public static MediaController getActiveMediaController()
{
    ComponentName componentName = new ComponentName(context, NotificationListener4.class);

    MediaSessionManager mediaSessionManager = (MediaSessionManager)context.getSystemService(Context.MEDIA_SESSION_SERVICE);
    List<MediaController> mediaControllerList = null;

    try
    {
        mediaControllerList = mediaSessionManager.getActiveSessions(componentName);

        for(MediaController mediaController: mediaControllerList)
        {
            if(mediaController.getPackageName().equals(ctrlAppProcessName)) return mediaController;
        }
    }
    catch(Exception e)
    {
        PodEmuLog.error("MPlayback: Notification Listener permissions not granted");
    }

    return null;
}
 
源代码4 项目: PodEmu   文件: MediaPlayback.java
public void action_play_pause()
{
    PodEmuLog.debug("PEMP: action PLAY_PAUSE requested");
    MediaController mediaController=getActiveMediaController();
    if( mediaController!=null && mediaController.getPlaybackState()!=null && mediaController.getTransportControls()!=null)// && (mediaController.getPlaybackState().getActions() & PlaybackState.ACTION_PLAY_PAUSE) == PlaybackState.ACTION_PLAY_PAUSE)
    {
        PodEmuLog.debug("PEMP: executing action through MediaController (ACTION_PLAY_PAUSE)");
        if(mediaController.getPlaybackState().getState() == PlaybackState.STATE_PLAYING)
            mediaController.getTransportControls().pause();
        else
            mediaController.getTransportControls().play();
    }
    else
    {
        PodEmuLog.debug("PEMP: executing action through KeyEvent");
        execute_action(KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE);
    }
}
 
源代码5 项目: PodEmu   文件: MediaPlayback.java
public void action_skip_forward()
{
    MediaController mediaController=getActiveMediaController();
    if( mediaController != null)// && (mediaController.getPlaybackState().getActions() & PlaybackState.ACTION_FAST_FORWARD) == PlaybackState.ACTION_FAST_FORWARD)
    {
        PodEmuLog.debug("PEMP: executing action through MediaController (ACTION_FAST_FORWARD)");
        mediaController.getTransportControls().fastForward();
    }
    else
    {
        PodEmuLog.debug("PEMP: executing action through KeyEvent");
        execute_action(KeyEvent.KEYCODE_MEDIA_FAST_FORWARD);
        /*
        if(Build.VERSION.SDK_INT >= 23)
        {
            execute_action(KeyEvent.KEYCODE_MEDIA_SKIP_FORWARD);
        }
        */
    }
}
 
源代码6 项目: PodEmu   文件: MediaPlayback.java
public void action_skip_backward()
{
    MediaController mediaController=getActiveMediaController();
    if( mediaController != null)// && (mediaController.getPlaybackState().getActions() & PlaybackState.ACTION_REWIND) == PlaybackState.ACTION_REWIND)
    {
        PodEmuLog.debug("PEMP: executing action through MediaController (ACTION_REWIND)");
        mediaController.getTransportControls().fastForward();
    }
    else
    {
        PodEmuLog.debug("PEMP: executing action through KeyEvent");
        execute_action(KeyEvent.KEYCODE_MEDIA_REWIND);
        /*
        if(Build.VERSION.SDK_INT >= 23)
        {
            execute_action(KeyEvent.KEYCODE_MEDIA_SKIP_BACKWARD);
        }
        */
    }
}
 
源代码7 项目: PodEmu   文件: MediaPlayback.java
public void action_stop_ff_rev()
{
    if(!isPlaying()) return;

    PodEmuLog.debug("PEMP: action STOP_FF_REV requested");
    MediaController mediaController=getActiveMediaController();
    if( mediaController != null)// && (mediaController.getPlaybackState().getActions() & PlaybackState.ACTION_PLAY) == PlaybackState.ACTION_PLAY)
    {
        PodEmuLog.debug("PEMP: executing action through MediaController (ACTION_STOP_FF_REV)");
        mediaController.getTransportControls().play();
    }
    else
    {
        PodEmuLog.debug("PEMP: executing action through KeyEvent");
        execute_action(KeyEvent.KEYCODE_MEDIA_PLAY);
    }
}
 
源代码8 项目: AcDisplay   文件: MediaController2Lollipop.java
@Override
public void onActiveSessionsChanged(List<MediaController> controllers) {
    MediaController2Lollipop p = mMediaControllerRef.get();
    if (p == null) return;

    if (p.mMediaController != null) {
        for (MediaController controller : controllers) {
            if (p.mMediaController == controller) {
                // Current media controller is still alive.
                return;
            }
        }
    }

    MediaController mc = pickBestMediaController(controllers);
    if (mc != null) {
        p.setMediaController(mc);
    } else {
        p.clearMediaController(true);
    }
}
 
源代码9 项目: AcDisplay   文件: MediaController2Lollipop.java
@Override
public void run(@NonNull MediaController2 mc) {
    final MediaController2Lollipop mcl = (MediaController2Lollipop) mc;
    final MediaController source = mcl.mMediaController;

    if (source != null && mToken.equals(source.getSessionToken())) {
        long now = SystemClock.elapsedRealtime();

        final MediaMetadata metadata = source.getMetadata();
        final PlaybackState playbackState = source.getPlaybackState();

        long delta = SystemClock.elapsedRealtime() - now;
        Log.i(TAG, "Got the new metadata & playback state in " + delta + " millis. "
                + "The media controller is " + source.getPackageName());

        mHandler.post(new Runnable() {
            @Override
            public void run() {
                mcl.updateMetadata(metadata);
                mcl.updatePlaybackState(playbackState);
            }
        });
    }
}
 
源代码10 项目: AsteroidOSSync   文件: MediaService.java
public void sync() {
    mDevice.enableNotify(mediaCommandsCharac, commandsListener);
    try {
        mMediaSessionManager = (MediaSessionManager) mCtx.getSystemService(Context.MEDIA_SESSION_SERVICE);
        List<MediaController> controllers = mMediaSessionManager.getActiveSessions(new ComponentName(mCtx, NLService.class));
        onActiveSessionsChanged(controllers);
        mMediaSessionManager.addOnActiveSessionsChangedListener(this, new ComponentName(mCtx, NLService.class));
    } catch (SecurityException e) {
        Log.w("MediaService", "No Notification Access");
    }
}
 
源代码11 项目: AsteroidOSSync   文件: MediaService.java
@Override
public void onActiveSessionsChanged(List<MediaController> controllers) {
    if (controllers.size() > 0) {
        if (mMediaController != null && !controllers.get(0).getSessionToken().equals(mMediaController.getSessionToken())) {
            // Detach current controller
            mMediaController.unregisterCallback(mMediaCallback);
            Log.d("MediaService", "MediaController removed");
            mMediaController = null;
        }

        if(mMediaController == null) {
            // Attach new controller
            mMediaController = controllers.get(0);
            mMediaController.registerCallback(mMediaCallback);
            mMediaCallback.onMetadataChanged(mMediaController.getMetadata());
            if (mMediaController.getPlaybackState() != null)
                mMediaCallback.onPlaybackStateChanged(mMediaController.getPlaybackState());
            Log.d("MediaService", "MediaController set: " + mMediaController.getPackageName());
            SharedPreferences.Editor editor = mSettings.edit();
            editor.putString(PREFS_MEDIA_CONTROLLER_PACKAGE, mMediaController.getPackageName());
            editor.apply();
        }
    } else {
        byte[] data = new byte[]{0};
        mDevice.write(mediaArtistCharac, data, MediaService.this);
        mDevice.write(mediaAlbumCharac, data, MediaService.this);
        mDevice.write(mediaTitleCharac, data, MediaService.this);
    }
}
 
源代码12 项目: scroball   文件: ListenerService.java
@Override
public void onCreate() {
  ScroballApplication application = (ScroballApplication) getApplication();
  sharedPreferences = application.getSharedPreferences();

  ConnectivityManager connectivityManager =
      (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
  ScroballDB scroballDB = application.getScroballDB();
  ScrobbleNotificationManager scrobbleNotificationManager =
      new ScrobbleNotificationManager(this, sharedPreferences, scroballDB);
  LastfmClient lastfmClient = application.getLastfmClient();
  TrackLover trackLover = new TrackLover(lastfmClient, scroballDB, connectivityManager);
  Scrobbler scrobbler =
      new Scrobbler(
          lastfmClient, scrobbleNotificationManager, scroballDB, connectivityManager, trackLover);

  playbackTracker = new PlaybackTracker(scrobbleNotificationManager, scrobbler);

  Log.d(TAG, "NotificationListenerService started");

  MediaSessionManager mediaSessionManager =
      (MediaSessionManager)
          getApplicationContext().getSystemService(Context.MEDIA_SESSION_SERVICE);

  ComponentName componentName = new ComponentName(this, this.getClass());
  mediaSessionManager.addOnActiveSessionsChangedListener(this, componentName);

  NetworkStateReceiver networkStateReceiver = new NetworkStateReceiver(scrobbler);
  IntentFilter filter = new IntentFilter(android.net.ConnectivityManager.CONNECTIVITY_ACTION);
  this.registerReceiver(networkStateReceiver, filter);

  // Trigger change event with existing set of sessions.
  List<MediaController> initialSessions = mediaSessionManager.getActiveSessions(componentName);
  onActiveSessionsChanged(initialSessions);

  sharedPreferences.registerOnSharedPreferenceChangeListener(this);
}
 
源代码13 项目: android-music-player   文件: MusicPlayerActivity.java
@Override
public void onConnected() {
    mMediaBrowser.subscribe(mMediaBrowser.getRoot(), mSubscriptionCallback);
    MediaController mediaController = new MediaController(
            MusicPlayerActivity.this, mMediaBrowser.getSessionToken());
    updatePlaybackState(mediaController.getPlaybackState());
    updateMetadata(mediaController.getMetadata());
    mediaController.registerCallback(mMediaControllerCallback);
    setMediaController(mediaController);
}
 
源代码14 项目: Noyze   文件: RemoteControlLollipop.java
private void unregister() {
    for (Map.Entry<MediaSession.Token, Pair<MediaController, MediaController.Callback>> entry : mControllers.entrySet()) {
        Pair<MediaController, MediaController.Callback> pair = entry.getValue();
        pair.first.unregisterCallback(pair.second);
    }
    synchronized (mControllers) {
        mControllers.clear();
    }
}
 
源代码15 项目: PodEmu   文件: MediaPlayback.java
public synchronized void action_next()
{
    //int currentTrack = getCurrentPlaylist().getCurrentTrackPos();
    //int trackCount   = getCurrentPlaylist().getTrackCount();
    //int newTrackPos  = currentTrack + 1;
    //if (newTrackPos == trackCount) newTrackPos = 0;
    //PodEmuLog.debug("PEMP: action NEXT requested. newTrackPos=" + newTrackPos);
    PodEmuLog.debug("PEMP: action NEXT requested");

    // TODO: implement repeat and shuffle
    //no loops? if(currentTrack == trackCount-1) return;

    if( shouldUpdatePosition() )
    {
        getCurrentPlaylist().setIncrement(+1);
        //getCurrentPlaylist().setCurrentTrack(newTrackPos);
    }

    PodEmuLog.error("PEMP: action NEXT, time = " + System.currentTimeMillis());

    MediaController mediaController=getActiveMediaController();
    if( mediaController != null) // && (mediaController.getPlaybackState().getActions() & PlaybackState.ACTION_SKIP_TO_NEXT) == PlaybackState.ACTION_SKIP_TO_NEXT)
    {
        PodEmuLog.debug("PEMP: executing action through MediaController (ACTION_SKIP_TO_NEXT)");
        mediaController.getTransportControls().skipToNext();
    }
    else
    {
        execute_action(KeyEvent.KEYCODE_MEDIA_NEXT);
    }

}
 
源代码16 项目: PodEmu   文件: MediaPlayback.java
public void action_play()
{
    PodEmuLog.debug("PEMP: action PLAY requested");
    MediaController mediaController=getActiveMediaController();
    if( mediaController != null)// && (mediaController.getPlaybackState().getActions() & PlaybackState.ACTION_PLAY) == PlaybackState.ACTION_PLAY)
    {
        PodEmuLog.debug("PEMP: executing action through MediaController (ACTION_PLAY)");
        mediaController.getTransportControls().play();
    }
    else
    {
        PodEmuLog.debug("PEMP: executing action through KeyEvent");
        execute_action(KeyEvent.KEYCODE_MEDIA_PLAY);
    }
}
 
源代码17 项目: PodEmu   文件: MediaPlayback.java
public void action_pause()
{
    PodEmuLog.debug("PEMP: action PAUSE requested");
    MediaController mediaController=getActiveMediaController();
    if( mediaController != null)// && (mediaController.getPlaybackState().getActions() & PlaybackState.ACTION_PAUSE) == PlaybackState.ACTION_PAUSE)
    {
        PodEmuLog.debug("PEMP: executing action through MediaController (ACTION_PAUSE)");
        mediaController.getTransportControls().pause();
    }
    else
    {
        PodEmuLog.debug("PEMP: executing action through KeyEvent");
        execute_action(KeyEvent.KEYCODE_MEDIA_PAUSE);
    }
}
 
源代码18 项目: PodEmu   文件: MediaPlayback.java
public void action_stop()
{
    PodEmuLog.debug("PEMP: action STOP requested");
    MediaController mediaController=getActiveMediaController();
    if( mediaController != null)// && (mediaController.getPlaybackState().getActions() & PlaybackState.ACTION_STOP) == PlaybackState.ACTION_STOP)
    {
        PodEmuLog.debug("PEMP: executing action through MediaController (ACTION_STOP)");
        mediaController.getTransportControls().stop();
    }
    else
    {
        PodEmuLog.debug("PEMP: executing action through KeyEvent");
        execute_action(KeyEvent.KEYCODE_MEDIA_STOP);
    }
}
 
源代码19 项目: PodEmu   文件: NotificationListener4.java
public void onActiveSessionsChanged(List<MediaController> list)
{
    PodEmuLog.debug(TAG + ": onActiveSessionsChanged");
    /*
    if (playerFragment.f13549e != null && playerFragment.f13549e.equals("NotificationListener"))
    {
        this.notificationListenerTMP1.handler.removeCallbacks(this.notificationListenerTMP1.runnableSessionChangeThread);
        this.notificationListenerTMP1.handler.postDelayed(this.notificationListenerTMP1.runnableSessionChangeThread, 2000);
    }
    */

    if(notificationListenerTMP1 != null) notificationListenerTMP1.parseActiveSessions(list);
}
 
源代码20 项目: io2015-codelabs   文件: MusicPlayerActivity.java
@Override
public void onConnected() {
    mMediaBrowser.subscribe(mMediaBrowser.getRoot(), mSubscriptionCallback);
    MediaController mediaController = new MediaController(
            MusicPlayerActivity.this, mMediaBrowser.getSessionToken());
    updatePlaybackState(mediaController.getPlaybackState());
    updateMetadata(mediaController.getMetadata());
    mediaController.registerCallback(mMediaControllerCallback);
    setMediaController(mediaController);
}
 
源代码21 项目: AcDisplay   文件: MediaController2Lollipop.java
@Nullable
private MediaController pickBestMediaController(
        @NonNull List<MediaController> list) {
    int mediaControllerScore = -1;
    MediaController mediaController = null;
    for (MediaController mc : list) {
        if (mc == null) continue;
        int mcScore = 0;

        // Check for the current state
        PlaybackState state = mc.getPlaybackState();
        if (state != null) {
            switch (state.getState()) {
                case PlaybackState.STATE_STOPPED:
                case PlaybackState.STATE_ERROR:
                    break;
                default:
                    mcScore++;
                    break;
            }
        }

        if (mcScore > mediaControllerScore) {
            mediaControllerScore = mcScore;
            mediaController = mc;
        }
    }
    return mediaController;
}
 
源代码22 项目: AcDisplay   文件: MediaController2Lollipop.java
/**
 * {@inheritDoc}
 */
@Override
public void onStart(Object... objects) {
    super.onStart();

    // Init a new thread.
    mThread = new T(this);
    mThread.setPriority(Thread.MIN_PRIORITY);
    mThread.start();

    // Media session manager leaks/holds the context for too long.
    // Don't let it to leak the activity, better lak the whole app.
    final Context context = mContext.getApplicationContext();
    mMediaSessionManager = (MediaSessionManager) context
            .getSystemService(Context.MEDIA_SESSION_SERVICE);

    try {
        mMediaSessionManager.addOnActiveSessionsChangedListener(mSessionListener, mComponent);
        mSessionListener.setMediaController(this);
        mSessionListening = true;
    } catch (SecurityException exception) {
        Log.w(TAG, "Failed to start Lollipop media controller: " + exception.getMessage());
        // Try to unregister it, just it case.
        try {
            mMediaSessionManager.removeOnActiveSessionsChangedListener(mSessionListener);
        } catch (Exception e) { /* unused */ } finally {
            mMediaSessionManager = null;
            mSessionListening = false;
        }
        // Media controller needs notification listener service
        // permissions to be granted.
        return;
    }

    List<MediaController> controllers = mMediaSessionManager.getActiveSessions(mComponent);
    mSessionListener.onActiveSessionsChanged(controllers);
}
 
源代码23 项目: AcDisplay   文件: MediaController2Lollipop.java
private void setMediaController(@NonNull MediaController controller) {
    if (DEBUG) Log.d(TAG, "Switching to \'" + controller.getPackageName() + "\' controller.");

    clearMediaController(true);
    mMediaController = controller;
    mMediaController.registerCallback(mCallback);
    // Get the new metadata and new playback state async-ly
    // to prevent possible ANRs.
    mThread.sendTask(new EventUpdateMetadata(mMediaController.getSessionToken()));
}
 
源代码24 项目: AcDisplay   文件: MediaController2Lollipop.java
/**
 * {@inheritDoc}
 */
public void sendMediaAction(int action) {
    if (mMediaController == null) {
        // Maybe somebody is waiting to start his player by
        // this lovely event.
        // TODO: Check if it works as expected.
        MediaController2.broadcastMediaAction(mContext, action);
        return;
    }

    MediaController.TransportControls controls = mMediaController.getTransportControls();
    switch (action) {
        case ACTION_PLAY_PAUSE:
            if (mPlaybackState == PlaybackState.STATE_PLAYING) {
                controls.pause();
            } else {
                controls.play();
            }
            break;
        case ACTION_STOP:
            controls.stop();
            break;
        case ACTION_SKIP_TO_NEXT:
            controls.skipToNext();
            break;
        case ACTION_SKIP_TO_PREVIOUS:
            controls.skipToPrevious();
            break;
        default:
            throw new IllegalArgumentException();
    }
}
 
源代码25 项目: Noyze   文件: RemoteControlLollipop.java
private void unregister() {
    for (Map.Entry<MediaSession.Token, Pair<MediaController, MediaController.Callback>> entry : mControllers.entrySet()) {
        Pair<MediaController, MediaController.Callback> pair = entry.getValue();
        pair.first.unregisterCallback(pair.second);
    }
    synchronized (mControllers) {
        mControllers.clear();
    }
}
 
源代码26 项目: QuickLyric   文件: ScrobblerService.java
@Override
public void onCreate() {
    super.onCreate();
    sRunning = true;
    try {
        mediaControllerCallback = new MediaControllerCallback(this);
        MediaSessionManager.OnActiveSessionsChangedListener sessionsChangedListener =
                list -> mediaControllerCallback.registerActiveSessionCallback(ScrobblerService.this, list);
        listener = new WeakReference<>(sessionsChangedListener);
        MediaSessionManager manager = ((MediaSessionManager) getSystemService(Context.MEDIA_SESSION_SERVICE));
        ComponentName className = new ComponentName(getApplicationContext(), NotificationListenerService.class);
        manager.addOnActiveSessionsChangedListener(sessionsChangedListener, className);
        List<MediaController> controllers = manager.getActiveSessions(className);
        mediaControllerCallback.registerActiveSessionCallback(ScrobblerService.this, controllers);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            SharedPreferences current = getSharedPreferences("current_music", Context.MODE_PRIVATE);
            String artist = current.getString("artist", "");
            String track = current.getString("track", "");
            startForeground(NOTIFICATION_ID, NotificationUtil.makeNotification(this, artist, track, 0L, false, false));
        }
        if (!controllers.isEmpty())
            mediaControllerCallback.broadcastControllerState(this, controllers.get(0), null);
    } catch (Exception e) {
        e.printStackTrace();
        return;
    }
    Log.d("geecko", "mediaControllerCallback registered");
}
 
源代码27 项目: android_9.0.0_r45   文件: MediaControlView2.java
/**
 * @hide TODO: remove once the implementation is revised
 */
public void setController(MediaController controller) {
    mProvider.setController_impl(controller);
}
 
源代码28 项目: letv   文件: ActivityCompat21.java
public static void setMediaController(Activity activity, Object mediaControllerObj) {
    activity.setMediaController((MediaController) mediaControllerObj);
}
 
源代码29 项目: AsteroidOSSync   文件: MediaService.java
@Override
public void onAudioInfoChanged(MediaController.PlaybackInfo playbackInfo) {
    super.onAudioInfoChanged(playbackInfo);
}
 
源代码30 项目: scroball   文件: ListenerService.java
private void controllerPlaybackStateChanged(MediaController controller, PlaybackState state) {
  playbackTracker.handlePlaybackStateChange(controller.getPackageName(), state);
}
 
 类所在包
 类方法
 同包方法