## La primera etapa del proyecto de capacitación: basada en el reproductor de música de la tarjeta de almacenamiento V04
( 1) Requisitos funcionales
Según el reproductor de música con tarjeta de memoria V0.3, realice las siguientes modificaciones:
El método de creación puede escanear todos los archivos mp3 en la tarjeta de memoria (usando un algoritmo recursivo).
Use clases de aplicaciones personalizadas para almacenar datos y métodos globales.
Use tareas asincrónicas para completar el escaneo de la tarjeta de memoria que consume mucho tiempo.
Descripción: Hay pocos directorios en el tarjeta de memoria del emulador, por lo que el escaneo es muy fácil. Está casi terminado y casi no hay una barra de progreso en espera. Es mejor ejecutar el programa en una máquina real para probar.
(2) Efecto de ejecución
(3) Implicando puntos de conocimiento
1. Etiqueta (TextView)
2. Botón (Botón)
3. Reproductor multimedia (MediaPlayer)
4. Barra de progreso (ProgressBar)
5. Hilo (Hilo)
6. Procesador de mensajes (Controlador
7 Vista de lista (ListView)
8. Tarea asincrónica (AsyncTask)
9. Aplicación (Aplicación)
10. Algoritmo recursivo
(4) Pasos de implementación
1. Copie el material de la imagen en el directorio dibujable y el directorio mipmap
2. Botón selector de imagen de fondo
(1) Botón de reproducción selector de imagen de fondo-play_button_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/play_button_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/play_button" android:state_pressed="false" />
</selector>
(2) Botón de pausa selector de imagen de fondo-pause_button_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/pause_button_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/pause_button" android:state_pressed="false" />
</selector>
(3) Selector de imagen de fondo del botón anterior-previous_button_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/previous_button_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/previous_button" android:state_pressed="false" />
</selector>
(4) Selector de imagen de fondo del botón Siguiente-next_button_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/next_button_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/next_button" android:state_pressed="false" />
</selector>
3. El archivo de recursos de diseño principal activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:background="@drawable/background"
android:orientation="vertical"
android:padding="20dp"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ProgressBar
android:id="@+id/pbScanMusic"
android:layout_width="100dp"
android:layout_height="100dp"
android:visibility="gone" />
<TextView
android:id="@+id/tvScanMusic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/scan_music"
android:textColor="#0000ff"
android:textSize="25sp"
android:visibility="gone" />
</LinearLayout>
<ListView
android:id="@+id/lvMusicName"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginBottom="16dp"
android:layout_weight="8" />
<TextView
android:id="@+id/tvMusicName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:textColor="#0000ff"
android:textSize="20sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_weight="0.5"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:id="@+id/tvCurrentPosition"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textColor="#ff0000" />
<ProgressBar
android:id="@+id/pbMusicProgress"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="6" />
<TextView
android:id="@+id/tvDuration"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textColor="#ff00ff" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:gravity="center"
android:orientation="horizontal">
<Button
android:id="@+id/btnPrevious"
android:layout_width="60dp"
android:layout_height="50dp"
android:background="@drawable/previous_button_selector"
android:onClick="doPrevious" />
<Button
android:id="@+id/btnPlayOrPause"
android:layout_width="60dp"
android:layout_height="50dp"
android:background="@drawable/play_button_selector"
android:onClick="doPlayOrPause" />
<Button
android:id="@+id/btnNext"
android:layout_width="60dp"
android:layout_height="50dp"
android:background="@drawable/next_button_selector"
android:onClick="doNext" />
</LinearLayout>
</LinearLayout>
4. Archivo de recursos de cadena strings.xml
5. Crear plantilla de elemento de lista de nombres de música music_name_list_item.xml
6. Crear subpaquete ui y arrastrar MainActivity al subpaquete ui
6. Cree un subpaquete de entidad y cree una clase de entidad de música Música en él.
7. Cree un subpaquete de aplicación y cree una clase de aplicación de reproductor de música MusicPlayerApplication en él.
8. Cree un subpaquete de adaptador y cree un adaptador de música MusicAdapter en él.
9. Clase de interfaz principal- MainActivity
(1) Declare variables,
inicie la aplicación y verifique el efecto