Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Amazon Fire TV遥控键的播放/暂停逻辑有什么问题?_Android_Amazon Fire Tv - Fatal编程技术网

Android Amazon Fire TV遥控键的播放/暂停逻辑有什么问题?

Android Amazon Fire TV遥控键的播放/暂停逻辑有什么问题?,android,amazon-fire-tv,Android,Amazon Fire Tv,我有一个android应用程序,既适用于android手机/平板电脑,也适用于亚马逊FireTV。屏幕中央有一个播放/暂停按钮,按下该按钮时可在彼此之间切换。使用此按钮时,视频流可以正常播放和暂停。以下是我的ExoPlayerActivity类代码的第一部分: public class ExoPlayerActivity extends ActivityBase implements ExoPlayerView, PlaybackControlView.VisibilityListener,

我有一个android应用程序,既适用于android手机/平板电脑,也适用于亚马逊FireTV。屏幕中央有一个播放/暂停按钮,按下该按钮时可在彼此之间切换。使用此按钮时,视频流可以正常播放和暂停。以下是我的ExoPlayerActivity类代码的第一部分:

public class ExoPlayerActivity extends ActivityBase implements ExoPlayerView, PlaybackControlView.VisibilityListener,
        ExoPlayer.EventListener, View.OnTouchListener {
    private final static String TAG = " [ExoPlayerActivity] ";
    private ExoPlayerPresenter exoplayerPresenter;
    protected String userAgent;
    private DataSource.Factory mediaDataSourceFactory;
    private static final DefaultBandwidthMeter BANDWIDTH_METER = new DefaultBandwidthMeter();
    private SimpleExoPlayerView simpleExoPlayerView;
    private SimpleExoPlayer player;
    private DefaultTrackSelector trackSelector;

    private boolean shouldAutoPlay;
    public static String playlink;

    private LinearLayout debugRootView;
    private TextView debugTextView;
    private Button retryButton;
    private Handler mainHandler;
    private boolean playerNeedsSource;

    // private ImageView channelPoster;
    private TextView channelTitle;
    private ImageView play, pause;
    private ProgressBar progressBar;
    private RelativeLayout channelDetail;
    private RecyclerView channelRecyclerView;
    private float x1,x2;
    private View rootView;

    private Timer timer;
    private TimerTask timerTask;
    private int delayTime;
    private boolean isPaused;

    @Inject
    private Logger logger;

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        InjectFactory.injectMembers(this);
        exoplayerPresenter = new ExoPlayerPresenter(ExoPlayerActivity.this, this);
        shouldAutoPlay = true;
        mediaDataSourceFactory = buildDataSourceFactory(true);
        userAgent = Util.getUserAgent(this, "ExoPlayer");
        mainHandler = new Handler();
        playlink = getIntent().getExtras().getString("playLink");
        logger.info(TAG+"Play Link is: " + playlink);

        setContentView(R.layout.activity_exoplayer);
        rootView = findViewById(R.id.root);

        play = (ImageView) findViewById(R.id.play);
        pause = (ImageView) findViewById(R.id.pause);
        play.setVisibility(View.INVISIBLE);

        simpleExoPlayerView = (SimpleExoPlayerView) findViewById(R.id.player_view);
        simpleExoPlayerView.requestFocus();
        simpleExoPlayerView.setOnTouchListener(this);
        simpleExoPlayerView.setControllerVisibilityListener(this);

        channelDetail = (RelativeLayout) findViewById(R.id.player_details);
        channelTitle = (TextView) findViewById(R.id.airing_title);

        channelRecyclerView = (RecyclerView) findViewById(R.id.airingRecyclerView);
        progressBar = (ProgressBar) findViewById(R.id.player_loading);
        progressBar.setVisibility(View.INVISIBLE);

        isPaused = false;
        // Button Listener
        setListener();

        // keep screen on
        getWindow().addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

        // Timer Task
        setTimerTask();

        // setting up channel titles, poster, and airing list at bottom
        setFullScreen();
        setChannelRecyclerView();
        updatePlayerViewDetails();
    }

    private void setListener() {
        play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                player.setPlayWhenReady(true);
                play.setVisibility(View.INVISIBLE);
                pause.setVisibility(View.VISIBLE);
            }
        });

        pause.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                player.setPlayWhenReady(false);
                play.setVisibility(View.VISIBLE);
                pause.setVisibility(View.INVISIBLE);
            }
        });
        simpleExoPlayerView.setControllerVisibilityListener(new PlaybackControlView.VisibilityListener() {
            @Override
            public void onVisibilityChange(int visibility) {
                simpleExoPlayerView.hideController();
            }
        });
    }
请注意,在setListener()方法中,当单击“暂停”按钮时,将调用player.setPlayWhenReady(false),以暂停流,并将按钮切换为播放符号。相反,当按下播放按钮时调用player.setplaywhenredy(true),再次将按钮切换为暂停符号

现在是我用来注册Amazon Fire TV输入的onKeyUp方法。在OnCreate中,我最初将isPaused设置为false。以下是我的onKeyUp方法:

@Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        boolean handled = false;

        switch (keyCode) {
            case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
                //TODO: fix play pause logic
                if(isPaused=false){
                    player.setPlayWhenReady(true);
                    toggleControlsVisibility();
                    isPaused=true;
                    handled=true;
                    break;
                }
                else if (isPaused=true){
                    player.setPlayWhenReady(false);
                    toggleControlsVisibility();
                    isPaused=false;
                    handled=true;
                    break;
                }
            case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
                //go forward one channel
                exoplayerPresenter.onSwipeLeft();
                handled=true;
                break;
            case KeyEvent.KEYCODE_MEDIA_REWIND:
                //go back one channel
                exoplayerPresenter.onSwipeRight();
                handled=true;
                break;
            case KeyEvent.KEYCODE_MENU:
                toggleControlsVisibility();
                handled=true;
                break;
        }
        return handled || super.onKeyUp(keyCode, event);
    }
假设第一个if语句是case#1,另一个if语句是case#2。当我第一次按下遥控器上的播放/暂停按钮时,它会暂停流。这部分对我来说没有什么意义,因为我在onCreate中将isPaused设置为false。案例1不应该是被执行的吗?在这种情况下,我将调用setplaywhenrady(true),它将保持流媒体播放。但不知何故,它使水流暂停。然后,流暂停后,我再次按下遥控器上的播放/暂停按钮,但它不会恢复流

我一直在研究我的逻辑,似乎不知道发生了什么。我尝试使用onKeyDown而不是onkeydup,但是结果没有什么不同。Android studio还警告我isPaused=true总是正确的。这增加了我的困惑,因为在onCreate中,isPaused是false。只有当我按下按钮时,它才能变成真的(我不会在代码中的任何其他地方更改isPaused的值)


编辑:对不起,当我将鼠标移到案例1上时,Android studio警告我isPaused总是错误的。当我将鼠标移到案例2上时,Android studio警告我isPaused总是正确的。仍然不确定这有什么帮助。

上面代码中的小错误。。。应该是

if(isPaused==false){
...

(不仅仅是一个
=

如果(isPaused==false){?@offbeat哺乳动物是的..就是这样…现在要从桥上跳下去了。:)没有什么比一个小小的打字错误更糟糕的了,你的头在键盘上敲了几个小时试图修复它!