首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android音乐流应用程序

Android音乐流应用程序
EN

Code Review用户
提问于 2016-07-17 23:29:34
回答 1查看 896关注 0票数 1

这是我第一次构建Android应用程序,甚至第一次使用Java。所有这些代码都能工作,但是我希望优化它,或者找出事情是否比我所做的更容易完成。

radio.java

代码语言:javascript
复制
package com.example.jacob.wutk;

import android.media.AudioManager;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;

public class radio extends AppCompatActivity {

    private MediaPlayer mediaPlayer;
    private boolean isMediaPlayerStarted = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_radio);
        setMediaPlayer();
    }

    public void setMediaPlayer() {
        try {
            mediaPlayer = new MediaPlayer();
            String url = "http://streamer.cci.utk.edu:8000/wutk-vorbis"; // your URL here

            final ImageButton imb = (ImageButton) findViewById(R.id.playPause);

            imb.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (!isMediaPlayerStarted) {
                        mediaPlayer.prepareAsync();
                        isMediaPlayerStarted = true;
                    } else {
                        if (mediaPlayer.isPlaying()) {
                            imb.setImageResource(R.drawable.play1);
                            mediaPlayer.pause();
                        } else {
                            imb.setImageResource(R.drawable.pause1);
                            mediaPlayer.start();
                        }
                    }
                }
            });

            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                public void onPrepared(MediaPlayer mediaPlayer){
                    mediaPlayer.start();
                }
            });

            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mediaPlayer.setDataSource(url);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }}

activity_radio.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    tools:context="com.example.jacob.wutk.radio">
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="left|center_vertical"
        android:scaleType="centerCrop"
        android:src="@drawable/background_mic1"/>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingBottom="1.0dip"
        android:paddingLeft="4.0dip"
        android:paddingRight="4.0dip"
        android:paddingTop="5.0dip">
       <ImageButton
           android:id="@+id/playPause"
           android:layout_width="0.0dip"
           android:layout_height="wrap_content"
           android:layout_weight="1.0"
           android:background="?android:selectableItemBackground"
           android:clickable="true"
           android:scaleType="fitCenter"
           android:onClick="playPauseMusic"
           android:src="@drawable/play1"/>
       <ImageView
           android:layout_width="0.0dip"
           android:layout_height="fill_parent"
           android:layout_marginRight="5dp"
           android:layout_weight="1.0"
           android:background="?android:selectableItemBackground"
           android:scaleType="fitCenter"
           android:src="@drawable/logo"/>

    </LinearLayout>

</FrameLayout>

应用程序调试版本

EN

回答 1

Code Review用户

发布于 2016-07-18 14:39:42

在你发布的文章中并没有太多的内容,所以没有什么可以区分的。实际上,我要提到的唯一功能更改是,您可以使用一个MediaController类来提供播放、暂停和查找功能(包括安卓用户熟悉的标准UI )。也就是说,如果这是一个设计决策,而不仅仅是不知情的结果,那么就可以百分之百地找到使用您自己的UI。另外,在“`MediaPlayer”第一次启动时,您不会更新play/ update。除此之外,我看到的主要是代码样式和约定问题。

  1. 类通常使用PascalCase命名(您有小写)。此外,惯例是在扩展活动时使用" Activity“一词,因此您的radio类可能应该是RadioActivity
  2. 前缀set通常是为setter方法保留的,这些方法可以更新变量值,并经常围绕该更新进行一些预处理或后处理工作。我可能会叫setMediaPlayer类似于initializeMediaPlayerstartMediaPlayer
  3. 您可以将setMediaPlayer分解为多个较小的方法。
  4. 您可能不希望整个方法体位于try块中--找出潜在的throw并将其余的移出。这有点吹毛求疵,对于这样一个相当小的函数来说并不重要,但这是一个很好的习惯。
  5. imb是一个糟糕的变量名--不清楚引用的对象是什么类型。
  6. 在嵌套较少的情况下,您的代码可能更容易阅读。我可能会将onClick中的功能移到它自己的方法中,并在onClick中调用该方法。
  7. 为什么imb变量是final而不是成员变量?这样做是可以的,但似乎没有明确的理由--您在其他地方使用成员变量。
  8. 同样,这也不是一个关键问题,但安卓的惯例是在private变量前加上m,这样mediaPlayer就会变成mMediaPlayer
  9. 为什么setMediaPlayer是公开的?总是尽可能的严格限制。
  10. isMediaPlayerStarted默认为false,因此不需要设置它。
  11. 如果引发错误,是否确实要打印堆栈跟踪?如果这是您想要的,这可能是好的,但是我怀疑这要么是IDE的决定,要么是复制/粘贴的结果。这里可能会抛出什么错误?可能的消息来源是什么?如果那样的话你到底想做什么?
  12. 如果不使用任何ImageButton方法,则不需要对其进行强制转换-- findViewById返回一个有setOnClickListener方法的View,因此强制转换不会执行任何操作。
票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/135147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档