这是我第一次构建Android应用程序,甚至第一次使用Java。所有这些代码都能工作,但是我希望优化它,或者找出事情是否比我所做的更容易完成。
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();
}
}}<?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>应用程序调试版本
发布于 2016-07-18 14:39:42
在你发布的文章中并没有太多的内容,所以没有什么可以区分的。实际上,我要提到的唯一功能更改是,您可以使用一个MediaController类来提供播放、暂停和查找功能(包括安卓用户熟悉的标准UI )。也就是说,如果这是一个设计决策,而不仅仅是不知情的结果,那么就可以百分之百地找到使用您自己的UI。另外,在“`MediaPlayer”第一次启动时,您不会更新play/ update。除此之外,我看到的主要是代码样式和约定问题。
radio类可能应该是RadioActivity。set通常是为setter方法保留的,这些方法可以更新变量值,并经常围绕该更新进行一些预处理或后处理工作。我可能会叫setMediaPlayer类似于initializeMediaPlayer或startMediaPlayer。setMediaPlayer分解为多个较小的方法。try块中--找出潜在的throw并将其余的移出。这有点吹毛求疵,对于这样一个相当小的函数来说并不重要,但这是一个很好的习惯。imb是一个糟糕的变量名--不清楚引用的对象是什么类型。onClick中的功能移到它自己的方法中,并在onClick中调用该方法。imb变量是final而不是成员变量?这样做是可以的,但似乎没有明确的理由--您在其他地方使用成员变量。private变量前加上m,这样mediaPlayer就会变成mMediaPlayer。setMediaPlayer是公开的?总是尽可能的严格限制。isMediaPlayerStarted默认为false,因此不需要设置它。ImageButton方法,则不需要对其进行强制转换-- findViewById返回一个有setOnClickListener方法的View,因此强制转换不会执行任何操作。https://codereview.stackexchange.com/questions/135147
复制相似问题