You are on page 1of 30

2

КП.ХПТК. 00481 - 27 81 01

Зміст
с.

1 Вступ 3
2 Технічні характеристики 5
2.1 Постановка задачі 5
2.2 Визначення структури вхідних даних 5
2.3 Визначення структури вихідних даних 6
2.4 Вимоги до технічних засобів 7
2.5 Вибір мови програмування 7
2.6 Опис алгоритму рішення задачі 8
2.7 Виконання програми 13
Висновок 14
Список використаних джерел 15
Додаток А Схема алгоритму програми 16
Додаток Б Лістинг програми 17
3
КП.ХПТК. 00481 - 27 81 01

1 Вступ

Сьогоднішній день є часом науково-технічного прогресу, дуже складно


уявити собі життя і побут сучасного суспільства без використання мобільних
пристроїв. Прискорюється ритм життя, замість з нею прискорюється процес
створення суспільством технічних новинок для своєї зручності. Взяти, наприклад,
мобільні телефони. Ми користуємося ними всюди - вдома, в поїздці, на роботі, на
відпочинку. Це зручно можна навіть сказати комфортно. Мобільний телефон є у
кожного, і у бізнесмена, і школяра, він несподівано увірвався, але міцно осіли
закріпився в нашому житті.
Очевидно, що мобільний телефон вже давно перестав бути просто засобом
спілкування. Звичайний розмова по телефону поступово стає другорядною
функцією, зникаючи в величезному наборі функцій, що реалізуються мобільним
телефоном. Слухати музику, фотографувати, грати ... Цей список можна
продовжувати нескінченно. Таким чином, мобільний телефон став
багатофункціональним пристроєм, що дозволяє людині користуватися практично
всіма сучасними технологіями[1].
Змінилося і ставлення людей до мобільних телефонів. Сьогодні, забувши
стільниковий будинку, люди відчувають себе не комфортно. Відсутність можливості
зателефонувати родичам, друзям або знайомим надає відчуття відірваності від
суспільства. Хоча, всього кілька років тому вони спокійно обходилися без
мобільного телефону і вважали його атрибутом розкоші.
Всього пару десятиліть назад були випущені перші мобільні телефони. Вони
були великими, незручними у використанні, не мали додаткових функцій, і. до того
ж, були не по кишені людині із середнім доходом. Але з часом все змінюється, і
мобільники не виняток. Навіть навпаки, їх розвиток йде колосальними темпами.
Якщо на зорі свого розвитку телефони намагалися зробити компактними і
дешевими, то сьогодні, досягнувши в цьому пристойних показників, мобільні
4
КП.ХПТК. 00481 - 27 81 01

телефони роблять універсальним пристроєм, який може замінити диктофон,


фотоапарат, і навіть комп'ютер.
Ця універсальність досягається завдяки новим можливостям операційних
систем, які розвиваються разом з самими апаратними можливостями. Успіх
мобільного пристрою ще і в більшій мірі залежить від того, яка на ньому
встановлений а операційна система. Їх на ринку величезна кількість: iPhone OS,
MeeGo, Windows Mobile, Samsung Bado OS і багато інших. Але безсумнівним
лідером за популярністю, на сьогоднішній день виступає, безсумнівно ОС Android.
Вона націлена на масову аудиторію і є досить доступною і зручною програмною
розробкою. Секрет її успіху дуже простий - вона відкрита і безкоштовна, надає
програмісту зручні засоби розробки і можливість реалізації своїх продуктів, число
яких на сьогоднішній день налічує кілька сотень тисяч[2].
В даний час мультимедійні-технології бурхливо розвиваються в області
інформаційних технологій. У цьому напрямку активно працює значна кількість
великих і дрібних фірм, технічних університетів і студій (зокрема IВМ, Aррlе,
Моtогоlа, Sоnу, Intel та ін.). Області використання надзвичайно різноманітні:
інтерактивні навчальні та інформаційні системи, САПР, розваги та ін. Тому в своему
курсовому проекті я вирішив розробити власний програвач аудіофайлів для
смартфонів.
5
КП.ХПТК. 00481 - 27 81 01

2 Технічні характеристики
2.1 Постановка задачі

Мій курсовий проект «Програвач аудіофайлів для ОС Android» полягає у


написанні програми, як зможе програвати аудіофайли.
Створення цієї програми необхідне для того, щоб зробити користування
смартфоном більш зручним для людини. Маючи таку програму користувач зможе в
будь який час слухати музику яка знаходиться на смартфоні коритувача.
Програма повинна вміти:
-Сканувати файлову систему, знаходити .mp3 файли та додавати їх до
додатку;
-програвати знайдені композиції;
Даний додаток має працювати на операційній системі Android, так як на
даний момент вона являє собою найпоширенішу ОС у світі для смартфонів. Усі
налаштування що робить додаток зберігаються у середовищі операційної системи.
При включені додатку перед користувачев з’являється головна сторінка
додатку на якій знаходиться список композицій знайдених на смартфоні. При
натисненні на будь який елемент списку програма відкриває нову форму з
елементами керування та починае програвати композицію автоматично.

2.2 Визначення структури вхідних даних

Таблиця 2.1- Вхідні дані


№ Ідентифікатор Тип Діапазон Пояснення
1 items String[ ] - масив який містить всі назви знайдених
композицій
2 mySong ArrayList<File> - масив який містить всі знайдені файли
користувача
Продовження таблиці 2.1
6
КП.ХПТК. 00481 - 27 81 01

№ Ідентифікатор Тип Діапазон Пояснення

3 position int 0 .. 65535 позиція композиції в списку


композицій
4 currentPosition int 0 .. 65535 час від початку програвання
композиції
5 totalDuration int 0 .. 65535 тривалість композиції

2.3 Визначення структури вихідних даних

Таблиця 2.2- Вихідні дані


№ Ідентифікатор Тип Діапазон Пояснення
1 sb SeekBar - шкала прогресу програвання композиції
2 updateSeekBar Thread - прогрес програвання композиції
3 pause Button - кнопка запуску та зупинки композиції
4 next Button - кнопка для переходу до наступної
композиції
5 previous Button - кнопка для переходу до попередньої
композиції
6 SongNameText TextView - текстове поле відображає назву
композиції яка програється
7 nowtime TextView - текстове поле відображає час від
початку програвання композиції
8 maxtime TextView - текстове поле відображає тривалість
композиції
9 sname String - Передає значення з масиву в тестове
поле
Продовження таблиці 2.2
№ Ідентифікатор Тип Діапазон Пояснення
10 listView ListView - список композицій
11 mp MediaPlayer - Відтворює обрану композицію

2.4 Визначення вимог до технічних засобів


7
КП.ХПТК. 00481 - 27 81 01

Програма була розроблена на комп’ютері такої конфігурації:


- Intel Core i3 2.7 GHz;
- пам’ять 8 Гбайт;
- жорсткий диск 1 Тбайт;
- кольоровий монітор;
- операційна система Windows 10.
Для нормального функціонування програми яка буде працювати на
телефоні під операційної системою Android, необхідні такі системні
вимоги:
- Процесор MediaTek MT6580A, 2 ядерний, 1.3 - 1.5 ГГц
- кількість вільної оперативної пам’яті не менше 50 Мбайт;
- загальний обсяг вбудованої пам'яті не менш 3 Мбайт;
- екран будь-якій матриці;
- операційна система Android починаючи з версії 4.0 закінчуючи версією
9.0.

2.5 Опис мови програмування

Для реалызації даної задачі я обрам одну з найпопулярніших середовищ


розробки для платформи андроїд Android Studio. Android Studio - це інтегроване
середовище розробки (IDE) для роботи з платформою Android, анонсована 16
травня 2013 року на конференції Google I / O.
IDE перебувала у вільному доступі починаючи з версії 0.1, опублікованій в
травні 2013, а потім перейшла в стадію бета-тестування, починаючи з версії 0.8, яка
була випущена в червні 2014 року. Перша стабільна версія 1.0 була випущена в
грудні 2014 року, тоді ж припинилася підтримка плагіна Android Development Tools
(ADT) для Eclipse[1-3].
8
КП.ХПТК. 00481 - 27 81 01

Android Studio, заснована на програмному забезпеченні IntelliJ IDEA від


компанії JetBrains, - офіційне засіб розробки Android додатків. Дане середовище
розробки доступна для Windows, OS X і Linux.
17 травня 2017, на щорічній конференції Google I / O, Google анонсував
підтримку мови Kotlin, використовуваного в Android Studio, як офіційної мови
програмування для платформи Android на додаток до Java і С ++.
Реалізіції проекту було використано мову програмування Java.
Java — об'єктно-орієнтована мова програмування, випущена 1995 року
компанією «Sun Microsystems» як основний компонент платформи Java. З 2009
року мовою займається компанія «Oracle», яка того року придбала «Sun
Microsystems». В офіційній реалізації Java-програми компілюються у байт-код,
який при виконанні інтерпретується віртуальною машиною для конкретної
платформи.
«Oracle» надає компілятор Java та віртуальну машину Java, які
задовольняють специфікації Java Community Process, під ліцензією GNU General
Public License.
Мова значно запозичила синтаксис із C і C++. Зокрема, взято за основу
об'єктну модель С++, проте її модифіковано. Усунуто можливість появи деяких
конфліктних ситуацій, що могли виникнути через помилки програміста та
полегшено сам процес розробки об'єктно-орієнтованих програм. Ряд дій, які в С/C+
+ повинні здійснювати програмісти, доручено віртуальній машині. Передусім Java
розроблялась як платформо-незалежна мова, тому вона має менше низькорівневих
можливостей для роботи з апаратним забезпеченням, що в порівнянні, наприклад, з
C++ зменшує швидкість роботи програм. За необхідності таких дій Java дозволяє
викликати підпрограми, написані іншими мовами програмування.

2.6 Опис алгоритму рішення задачі


9
КП.ХПТК. 00481 - 27 81 01

Програма складається з двох класів. В класі Tune реалізований пошук


файлів на мобільному пристрою та вивід списка знайдених композицій на екран.
Пошук mp3 файлів реалізовано за допомогою даного коду:
Dexter.withActivity(this)
.withPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
.withListener(new PermissionListener() {
@Override
public void onPermissionGranted(PermissionGrantedResponse response) {
display();
}

@Override
public void onPermissionDenied(PermissionDeniedResponse response) {
// check for permanent denial of permission
if (response.isPermanentlyDenied()) {
}
}

@Override
public void onPermissionRationaleShouldBeShown(PermissionRequest
permission, PermissionToken token) {
token.continuePermissionRequest();
}
}).check();
Всі знайдені композиції додаються в масив файлів який створюється за
допомогою методу findSong:
public ArrayList<File> findSong(File root){
ArrayList<File> at = new ArrayList<File>();
File[] files = root.listFiles();
10
КП.ХПТК. 00481 - 27 81 01

for(File singleFile : files){


if(singleFile.isDirectory() && !singleFile.isHidden()){
at.addAll(findSong(singleFile));
}
else{
if(singleFile.getName().endsWith(".mp3")){
at.add(singleFile);
}
}
}
return at;
}
Цей масив передається в методу display який створює список та відображає
його на екрані смартфона:
void display(){
final ArrayList<File> mySongs =
findSong(Environment.getExternalStorageDirectory());
items = new String[ mySongs.size() ];
for(int i=0;i<mySongs.size();i++){
//toast(mySongs.get(i).getName().toString());
items[i] =
mySongs.get(i).getName().toString().replace(".mp3","").replace(".wav","");
}
ArrayAdapter<String> adp = new
ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,items);
listView.setAdapter(adp);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int
11
КП.ХПТК. 00481 - 27 81 01

position, long l) {
String songName = listView.getItemAtPosition(position).toString();
startActivity(new Intent(getApplicationContext(),PlayerActivity.class)

.putExtra("pos",position).putExtra("songs",mySongs).putExtra("songname",songName));
}
});
При натиснені на будь який елемент списка відкриваеться класс
PlayerActivity. В даному класі знаходяться елементи керування. Кнопки паузи,
перейти до попередньої композиції та перейти до наступної композиції.
Реалізація кнопки пауза:
pause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sb.setMax(mp.getDuration());
if(mp.isPlaying()){
pause.setBackgroundResource(R.drawable.ic_play_arrow_black_24dp);
mp.pause();

}
else {
pause.setBackgroundResource(R.drawable.pause);
mp.start();
}
}
});
Реалізація кнопки попередня композиція:
previous.setOnClickListener(new View.OnClickListener() {
@Override
12
КП.ХПТК. 00481 - 27 81 01

public void onClick(View v) {


mp.stop();
mp.release();
position=((position-1)<0)?(mySongs.size()-1):(position-1);
Uri u = Uri.parse(mySongs.get(position).toString());
mp = MediaPlayer.create(getApplicationContext(),u);
sname = mySongs.get(position).getName().toString();
songNameText.setText(sname);
mp.start();
}
});
Реалізація кнопки наступна композиція:
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mp.stop();
mp.release();
position=((position+1)%mySongs.size());
Uri u = Uri.parse(mySongs.get( position).toString());
mp = MediaPlayer.create(getApplicationContext(),u);
sname = mySongs.get(position).getName().toString();
songNameText.setText(sname);
try{
mp.start();
}catch(Exception e){}

}
});
13
КП.ХПТК. 00481 - 27 81 01

2.7 Виконання програми

Підчас першого запуску програми запрошує дозвіл на використання


програми. Після натиснення кнопки дозволити додаток сканує мобільний пристрій
та виводить список знайдених mp3 файлів. Натискаючи на будь який елемент
списку програма переходить до наступної форми з елементами керування. При
натисненні на композицію програвання відбувається автоматично. В цій формі
користувач може поставити композицію на паузу, перейти до попередньої,
наступної композиції або керувати прогресом програвання за допомогою
спеціальної шкали.

Висновок

В даному курсовому проекті розроблена програма програвання аудіо файлів


на операційну систему Android.
14
КП.ХПТК. 00481 - 27 81 01

В результаті розробки проекту я розширив свої знання в сфері ОС Android, та


як з ним працювати за допомогою мови програмування Java.
Також я здобув навички у написанні програм та дуже багато дізнався про
методи роботи з операційною системою Android за допомогою мови програмування
високого рівня Java.

Список використаних джерел


15
КП.ХПТК. 00481 - 27 81 01

1.Большая подборка ресурсов для изучения Android-разработки [Електроний


ресурс] / Режим доступу: https://tproger.ru/digest/master-android-development/
вільний (08.11.19). – Назва з екрана. – Мова російська.
2.Учебник по Android для начинающих [Електроний ресурс] / Режим доступу:
https://startandroid.ru/ru/ вільний (08.11.19). – Назва з екрана. – Мова російська.
3.Справочник Java [Електроний ресурс] / Режим доступу: http://study-
java.ru/spravochnik-java/ вільний (08.11.19). – Назва з екрана. – Мова російська.
4.Вікіпедія. Android Studio [Електроний ресурс] / Режим доступу:
https://uk.wikipedia.org/wiki/Android_Studio вільний (11.11.19). – Назва з екрана. –
Мова українська.
5.Вікіпедія. Java [Електроний ресурс] / Режим доступу:
https://uk.wikipedia.org/wiki/Java вільний (11.11.19). – Назва з екрана. – Мова
українська.
6.Сафонов, М. С. Методичні вказівки до курсового проекту з дисципліни
«Операційні системи»[Текст] / М. С. Сафонов // Херсон, 2016.

Додаток А
16
КП.ХПТК. 00481 - 27 81 01

Схема алгоритму програми

Рисунок А.1 – Схема роботи програми


17
КП.ХПТК. 00481 - 27 81 01

Додаток Б
Лістинг програми

Файл Tune.java
import android.Manifest;
import android.app.Application;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.content.Intent;
import android.os.Environment;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import com.karumi.dexter.Dexter;
import com.karumi.dexter.PermissionToken;
import com.karumi.dexter.listener.PermissionDeniedResponse;
import com.karumi.dexter.listener.PermissionGrantedResponse;
import com.karumi.dexter.listener.PermissionRequest;
import com.karumi.dexter.listener.single.PermissionListener;
18
КП.ХПТК. 00481 - 27 81 01

import java.io.File;
import java.util.ArrayList;
public class Tunes extends AppCompatActivity {
ListView listView;
String[] items;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tunes);
listView = (ListView) findViewById(R.id.listView);

Dexter.withActivity(this)
.withPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
.withListener(new PermissionListener() {
@Override
public void onPermissionGranted(PermissionGrantedResponse response) {
display();
}

@Override
public void onPermissionDenied(PermissionDeniedResponse response) {
// check for permanent denial of permission
if (response.isPermanentlyDenied()) {
}
}

@Override
19
КП.ХПТК. 00481 - 27 81 01

public void onPermissionRationaleShouldBeShown(PermissionRequest


permission, PermissionToken token) {
token.continuePermissionRequest();
}
}).check();

public ArrayList<File> findSong(File root){


ArrayList<File> at = new ArrayList<File>();
File[] files = root.listFiles();
for(File singleFile : files){
if(singleFile.isDirectory() && !singleFile.isHidden()){
at.addAll(findSong(singleFile));
}
else{
if(singleFile.getName().endsWith(".mp3")){
at.add(singleFile);
}
}
}
return at;
}

void display(){
final ArrayList<File> mySongs =
findSong(Environment.getExternalStorageDirectory());
items = new String[ mySongs.size() ];
for(int i=0;i<mySongs.size();i++){
20
КП.ХПТК. 00481 - 27 81 01

//toast(mySongs.get(i).getName().toString());
items[i] = mySongs.get(i).getName().toString().replace(".mp3","");
}
ArrayAdapter<String> adp = new
ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line,
items);
listView.setAdapter(adp);

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int
position, long l) {

String songName = listView.getItemAtPosition(position).toString();


startActivity(new Intent(getApplicationContext(),PlayerActivity.class)

.putExtra("pos",position).putExtra("songs",mySongs).putExtra("songname",
songName));
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.my_menu, menu);
return true;
}

}
21
КП.ХПТК. 00481 - 27 81 01

Файл PlayerActivity.java
import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.media.MediaMetadataRetriever;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Build;
import android.service.quicksettings.Tile;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;

import org.w3c.dom.Text;

import java.io.File;
import java.util.ArrayList;
import java.util.jar.Manifest;
public class PlayerActivity extends AppCompatActivity{
22
КП.ХПТК. 00481 - 27 81 01

static MediaPlayer mp;


int position, currentPosition;
SeekBar sb;
ArrayList<File> mySongs;
Thread updateSeekBar;
Button pause,next,previous;
TextView songNameText;
TextView nowtime;
TextView maxtime;
String sname;
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.music_player_ui);
songNameText = (TextView) findViewById(R.id.txtSongLabel);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setTitle("Now Playing");
nowtime = (TextView)findViewById(R.id.now);
maxtime = (TextView)findViewById(R.id.max);
pause = (Button)findViewById(R.id.pause);
previous = (Button)findViewById(R.id.previous);
next = (Button)findViewById(R.id.next);
sb=(SeekBar)findViewById(R.id.seekBar);
updateSeekBar=new Thread(){
@Override
public void run(){
23
КП.ХПТК. 00481 - 27 81 01

int totalDuration = mp.getDuration();


maxtime.setText(String.valueOf((totalDuration/1000)/60) + ":" +
String.valueOf((totalDuration/1000) % 60));
currentPosition = 0;
while(currentPosition < totalDuration){
try{
Thread.sleep(1000);
}
catch (InterruptedException e){
e.printStackTrace();
}
currentPosition++;
runOnUiThread(new Runnable() {
@Override
public void run() {
currentPosition =mp.getCurrentPosition();
sb.setProgress(currentPosition);
nowtime.setText(String.valueOf((currentPosition/1000)/60) + ":" +
String.valueOf((currentPosition/1000) % 60));
}
});
}
}
};
if(mp != null){
mp.stop();
mp.release();
}
Intent i = getIntent();
24
КП.ХПТК. 00481 - 27 81 01

Bundle b = i.getExtras();
mySongs = (ArrayList) b.getParcelableArrayList("songs");
sname = mySongs.get(position).getName().toString();
String SongName = i.getStringExtra("songname");
songNameText.setText(SongName);
songNameText.setSelected(true);
position = b.getInt("pos",0);
Uri u = Uri.parse(mySongs.get(position).toString());
mp = MediaPlayer.create(getApplicationContext(),u);
mp.start();
sb.setMax(mp.getDuration());
updateSeekBar.start();

sb.getProgressDrawable().setColorFilter(getResources().getColor(R.color.colorWhite),
PorterDuff.Mode.MULTIPLY);
sb.getThumb().setColorFilter(getResources().getColor(R.color.colorSB),
PorterDuff.Mode.SRC_IN);
sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
mp.seekTo(seekBar.getProgress());
}
});
25
КП.ХПТК. 00481 - 27 81 01

pause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sb.setMax(mp.getDuration());
if(mp.isPlaying()){

pause.setBackgroundResource(R.drawable.ic_play_arrow_black_24dp);
mp.pause();

}
else {
pause.setBackgroundResource(R.drawable.pause);
mp.start();
}
}
});
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mp.stop();
mp.release();
position=((position+1)%mySongs.size());
Uri u = Uri.parse(mySongs.get( position).toString());
// songNameText.setText(getSongName);
mp = MediaPlayer.create(getApplicationContext(),u);
sname = mySongs.get(position).getName().toString();
songNameText.setText(sname);
try{
mp.start();
26
КП.ХПТК. 00481 - 27 81 01

}catch(Exception e){}
}
});
previous.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//songNameText.setText(getSongName);
mp.stop();
mp.release();
position=((position-1)<0)?(mySongs.size()-1):(position-1);
Uri u = Uri.parse(mySongs.get(position).toString());
mp = MediaPlayer.create(getApplicationContext(),u);
sname = mySongs.get(position).getName().toString();
songNameText.setText(sname);
mp.start();
}
});
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(item.getItemId()==android.R.id.home){
onBackPressed();
}
return super.onOptionsItemSelected(item);
}

@Override
public boolean onCreateOptionsMenu(Menu menu){
27
КП.ХПТК. 00481 - 27 81 01

getMenuInflater().inflate(R.menu.my_menu, menu);
return true;
}
}
Файл activity_tune.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_tune"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_fon">

<TextView
android:layout_marginTop="10dp"
android:layout_marginLeft="15dp"
android:text="Your songs"
android:textSize="24dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

<ListView
android:layout_marginTop="50dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/listView" />
28
КП.ХПТК. 00481 - 27 81 01

</RelativeLayout>
Файл music_player.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:weightSum="10"
android:background="@drawable/bg_fon"
android:layout_height="match_parent">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:gravity="center"
android:padding="10dp"
android:orientation="vertical"
android:layout_weight="7">

<ImageView
android:layout_width="250dp"
android:layout_height="250dp"
android:src="@drawable/coverart"
android:id="@+id/album_art"

/>

<TextView
android:id="@+id/txtSongLabel"
29
КП.ХПТК. 00481 - 27 81 01

android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="song name"
android:singleLine="true"
android:marqueeRepeatLimit="marquee_forever"
android:layout_marginTop="20dp"
android:textSize="22sp"
android:textAlignment="center"
android:ellipsize="marquee"
android:scrollHorizontally="true"
android:textColor="@color/colorWhite"
/>

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp">

<SeekBar
android:layout_alignParentBottom="true"
android:id="@+id/seekBar"
android:layout_width="350dp"
30
КП.ХПТК. 00481 - 27 81 01

android:layout_centerHorizontal="true"
android:layout_height="wrap_content"
android:layout_marginBottom="40dp"
/>
<Button
android:layout_marginTop="5dp"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_centerHorizontal="true"
android:background="@drawable/pause"
android:id="@+id/pause"

/>

<Button

android:id="@+id/next"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_toRightOf="@+id/pause"
android:background="@drawable/ic_skip_next_black_24dp"
android:layout_marginTop="15dp"
android:layout_marginLeft="20dp"
/>

<Button
android:id="@+id/previous"
android:layout_width="40dp"
android:layout_height="40dp"
31
КП.ХПТК. 00481 - 27 81 01

android:layout_marginTop="15dp"
android:layout_marginRight="20dp"
android:layout_toLeftOf="@+id/pause"
android:background="@drawable/ic_skip_previous_black_24dp" />

<TextView
android:layout_marginLeft="305dp"
android:id="@+id/max"
android:layout_marginTop="90dp"
android:layout_width="50dp"
android:layout_height="wrap_content"/>

<TextView
android:id="@+id/now"
android:layout_marginLeft="18dp"
android:layout_marginTop="90dp"
android:layout_width="50dp"
android:layout_height="wrap_content"/>

</RelativeLayout>

</LinearLayout>

</LinearLayout>

You might also like