Professional Documents
Culture Documents
пример курсача
пример курсача
КП.ХПТК. 00481 - 27 81 01
''2Зміст
с.
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 Вступ
2 Технічні характеристики
2.1 Постановка задачі
@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
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
}
});
13
КП.ХПТК. 00481 - 27 81 01
Висновок
Додаток А
16
КП.ХПТК. 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
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) {
.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
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>