123下一页
返回列表 发新帖

【原创开发】音乐播放器

[复制链接]

103

主题

4218

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
582
好评
36
信誉
102

MT论坛帅哥2019-5.1节快乐MT论坛最佳新人考神MT论坛新人

发表于 2023-7-5 08:57:58 来自手机  | 显示全部楼层 | 阅读模式  来自 上海
本帖最后由 焱妃 于 2023-7-5 09:03 编辑

自己无聊写的音乐播放器
默认整个列表循环,勾选单曲循环则一直单曲循环,没有做暂停功能,不想听直接关闭软件就行,可以拖动进度条调节
播放不会被打断,放视频时也不会被打断,接电话也是,屏幕熄灭后依然能播放。
注意:被播放的歌曲只能在安装包内的assets文件夹内(完全独立),里面有个--song.txt--文件,在里面配置歌曲信息。想听哪个自己用MT添加到安装包内部就行,下面的是测试包,里面仅有一首歌“one last time”
APK网址
源代码,仅有一个Activity,AIDE写的,无任何加密,随意二改。
  1. package com.kangplayer;

  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.widget.Spinner;
  5. import android.widget.ArrayAdapter;
  6. import android.view.Menu;
  7. import android.view.MenuItem;
  8. import android.widget.Toast;
  9. import android.view.Gravity;
  10. import android.widget.AdapterView.OnItemSelectedListener;
  11. import android.widget.AdapterView;
  12. import android.widget.Adapter;
  13. import android.view.View;
  14. import android.media.MediaPlayer;
  15. import java.io.IOException;
  16. import android.widget.TextView;
  17. import android.widget.SeekBar;
  18. import android.os.Handler;
  19. import android.os.Message;
  20. import android.widget.SeekBar.OnSeekBarChangeListener;
  21. import android.view.Window;
  22. import android.view.WindowManager;
  23. import android.widget.CheckBox;
  24. import android.view.View.*;
  25. import android.view.*;
  26. import android.app.*;
  27. import android.widget.*;
  28. import android.text.*;
  29. import java.util.*;
  30. import android.widget.AdapterView.*;
  31. import org.apache.http.client.utils.*;
  32. import java.io.*;

  33. public class MainActivity extends Activity {
  34.   String song[]={"此生不换伴奏","Something just like this伴奏","The Way I Still Love You"};
  35.   String songname[]={"a.mp3","b.mp3","c.mp3"};
  36.   String songlist[];
  37.   String songtxt="",songtxt1="";
  38.   Spinner sp;
  39.   TextView text;
  40.   SeekBar seek;
  41.   CheckBox ch;
  42.   MediaPlayer mediaplayer,player1;
  43.   boolean istuodong=false,isonwindow=true;
  44.   String shichang="";
  45.   int currsongposi=0;
  46.   @Override
  47.   protected void onCreate(Bundle savedInstanceState) {
  48.         super.onCreate(savedInstanceState);
  49.         setContentView(R.layout.activity_main);
  50.         getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  51.         getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
  52.         initsong();
  53.         init();
  54.         start();
  55.   }
  56.   public void initsong(){
  57.           try{
  58.           InputStream in=getAssets().open("song.txt");
  59.           byte by[]=new byte[in.available()];
  60.           int len=0;
  61.           while((len=in.read(by))!=-1){
  62.                   songtxt=new String(by,"UTF-8");
  63.           }
  64.           }catch(Exception e){}
  65.           song=songtxt.replace("\n","").split(">>");
  66.           for(int i=0;i<song.length;i++){
  67.                   song[i]=song[i].substring(0,song[i].indexOf(">"));
  68.           }
  69.           songname=songtxt.replace("\n","").split(">>");
  70.           for(int i=0;i<song.length;i++){
  71.                   songname[i]=songname[i].substring(songname[i].indexOf(">")+1);
  72.           }
  73.   }
  74.   public void init() {
  75.         sp = findViewById(R.id.activitymainSpinner1);
  76.         text = findViewById(R.id.activity_mainTextView);
  77.         ch = findViewById(R.id.activitymainCheckBox1);
  78.         seek = findViewById(R.id.activitymainSeekBar1);
  79.         sp.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, song));
  80.         sp.setOnItemSelectedListener(new OnItemSelectedListener(){

  81.                 @Override
  82.                 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
  83.                   currsongposi = position;
  84.                   if (isonwindow) {
  85.                         if (mediaplayer == null) {
  86.                           mediaplayer = new MediaPlayer();
  87.                           try {
  88.                                 mediaplayer.setDataSource(getAssets().openFd(songname[currsongposi]));
  89.                                 mediaplayer.prepare();
  90.                           } catch (Exception e) {}
  91.                           mediaplayer.start();
  92.                         } else {
  93.                           mediaplayer.reset();
  94.                           try {
  95.                                 mediaplayer.setDataSource(getAssets().openFd(songname[currsongposi]));
  96.                                 mediaplayer.prepare();
  97.                           } catch (Exception e) {}
  98.                           mediaplayer.start();


  99.                         }
  100.                         seek.setMax(mediaplayer.getDuration() / 1000);
  101.                   }

  102.                 }

  103.                 @Override
  104.                 public void onNothingSelected(AdapterView<?> parent) {
  105.                 }
  106.           });
  107.           sp.setOnTouchListener(new OnTouchListener(){

  108.                           @Override
  109.                           public boolean onTouch(View p1, MotionEvent p2)
  110.                           {
  111.                                   isonwindow=true;
  112.                                   // TODO: Implement this method
  113.                                   return false;
  114.                           }
  115.                   });
  116.         seek.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){

  117.                 @Override
  118.                 public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

  119.                 }

  120.                 @Override
  121.                 public void onStartTrackingTouch(SeekBar seekBar) {

  122.                 }

  123.                 @Override
  124.                 public void onStopTrackingTouch(SeekBar seekBar) {
  125.                   if (mediaplayer.isPlaying()) {
  126.                         mediaplayer.seekTo(seekBar.getProgress() * 1000);
  127.                   }

  128.                 }
  129.           });
  130.   }
  131.   Handler hand=new Handler(){

  132.         @Override
  133.         public void handleMessage(Message msg) {
  134.           super.handleMessage(msg);
  135.           seek.setMax(mediaplayer.getDuration() / 1000);
  136.           int fen=mediaplayer.getCurrentPosition() / 1000 / 60;
  137.           int miao=mediaplayer.getCurrentPosition() / 1000 - fen * 60;
  138.           int fen1=mediaplayer.getDuration() / 1000 / 60;
  139.           int miao1=mediaplayer.getDuration() / 1000 - fen1 * 60;
  140.           String miao2="",miao3="";
  141.           if (miao < 10) {
  142.                 miao2 = "0" + miao;       
  143.                 if (miao1 < 10) {
  144.                   miao3 = "0" + miao1;
  145.                 } else {
  146.                   miao3 = String.valueOf(miao1);
  147.                 }
  148.           } else {
  149.                 if (miao1 < 10) {
  150.                   miao3 = "0" + miao1;
  151.                 } else {
  152.                   miao3 = String.valueOf(miao1);
  153.                 }
  154.                 miao2 = String.valueOf(miao);
  155.           }
  156.           shichang = fen + ":" + miao2 + "/" + fen1 + ":" + miao3;
  157.           text.setText(shichang);
  158.           seek.setProgress(mediaplayer.getCurrentPosition() / 1000);
  159.           if (msg.what == 1) {
  160.                 sp.setSelection(currsongposi);
  161.           }
  162.         }

  163.   };
  164.   public void start() {
  165.         new Thread(new Runnable(){

  166.                 public void run() {
  167.                   while (true) {

  168.                         try {

  169.                           Thread.sleep(500);
  170.                           Message msg=new Message();
  171.                           msg.what = 0;
  172.                           hand.sendMessage(msg);
  173.                           if (mediaplayer.getCurrentPosition() > mediaplayer.getDuration() - 1000 && ch.isChecked()) {
  174.                                 mediaplayer.reset();
  175.                                 try {
  176.                                   mediaplayer.setDataSource(getAssets().openFd(songname[currsongposi]));
  177.                                   mediaplayer.prepare();
  178.                                 } catch (Exception e) {}
  179.                                 mediaplayer.start();
  180.                           }
  181.                           if (mediaplayer.getCurrentPosition() > mediaplayer.getDuration() - 1000 && !ch.isChecked()) {
  182.                                 currsongposi++;
  183.                                 if (currsongposi == song.length) {
  184.                                   currsongposi = 0;
  185.                                 }
  186.                                 Message msg1=new Message();
  187.                                 msg1.what = 1;
  188.                                 hand.sendMessage(msg1);
  189.                                 mediaplayer.reset();
  190.                                 try {
  191.                                   mediaplayer.setDataSource(getAssets().openFd(songname[currsongposi]));
  192.                                   mediaplayer.prepare();
  193.                                 } catch (Exception e) {}
  194.                                 mediaplayer.start();
  195.                           }

  196.                         } catch (InterruptedException e) {}
  197.                   }
  198.                 }
  199.           }).start();
  200.   }

  201.   

  202.   @Override
  203.   protected void onStop() {
  204.         super.onStop();
  205.         isonwindow = false;
  206.   }

  207.   @Override
  208.   public boolean onCreateOptionsMenu(Menu menu) {
  209.         menu.add("关于软件");
  210.         menu.add("定位歌曲");
  211.         return super.onCreateOptionsMenu(menu);
  212.   }

  213.   @Override
  214.   public boolean onOptionsItemSelected(MenuItem item) {
  215.         switch (item.getTitle().toString()) {
  216.           case "关于软件":
  217.                 Toast toast = Toast.makeText(this, "康康打造", Toast.LENGTH_LONG);
  218.                 toast.setGravity(Gravity.TOP, 0, 0);
  219.                 toast.show();
  220.                 break;
  221.           case "定位歌曲":
  222.                   AlertDialog.Builder b = new AlertDialog.Builder(this);
  223.                   b.setTitle("定位歌曲");
  224.                   View view = getLayoutInflater().inflate(R.layout.songlist,null);
  225.                   b.setView(view);
  226.                   b.show();
  227.                   final EditText e = view.findViewById(R.id.songlistEditText1);
  228.                   final ListView list = view.findViewById(R.id.songlistListView1);
  229.                   list.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,song));
  230.                   list.setOnItemClickListener(new OnItemClickListener(){

  231.                                         @Override
  232.                                         public void onItemClick(AdapterView<?> p1, View p2, int p3, long p4)
  233.                                         {
  234.                                                 isonwindow=true;
  235.                                                 for(int i=0;i<song.length;i++){
  236.                                                         if(song[i]==song[p3]){
  237.                                                                 currsongposi=i;
  238.                                                         }
  239.                                                 }
  240.                                                 sp.setSelection(currsongposi);
  241.                                                
  242.                                         }
  243.                   });
  244.                   e.addTextChangedListener(new TextWatcher(){

  245.                                         @Override
  246.                                         public void beforeTextChanged(CharSequence p1, int p2, int p3, int p4)
  247.                                         {
  248.                                                 // TODO: Implement this method
  249.                                         }

  250.                                         @Override
  251.                                         public void onTextChanged(CharSequence p1, int p2, int p3, int p4)
  252.                                         {
  253.                                                 // TODO: Implement this method
  254.                                         }

  255.                                         @Override
  256.                                         public void afterTextChanged(Editable p1)
  257.                                         {
  258.                                                 String allsong="";               
  259.                                                 for(int i = 0;i<song.length;i++){
  260.                                                         if(song[i].contains(e.getText().toString())){
  261.                                                                 allsong=allsong+song[i]+"]";
  262.                                                         }
  263.                                                 }
  264.                                                 //Toast.makeText(MainActivity.this,allsong,Toast.LENGTH_LONG).show();
  265.                                                
  266.                                                 songlist=allsong.split("]");
  267.                                                 list.setAdapter(new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_list_item_1,songlist));
  268.                                                 list.setOnItemClickListener(new OnItemClickListener(){

  269.                                                                 @Override
  270.                                                                 public void onItemClick(AdapterView<?> p1, View p2, int p3, long p4)
  271.                                                                 {
  272.                                                                         Toast.makeText(MainActivity.this,songlist[p3],Toast.LENGTH_LONG).show();
  273.                                                                         isonwindow=true;
  274.                                                                     for(int i=0;i<song.length;i++){
  275.                                                                                 if(song[i].contains(songlist[p3])){
  276.                                                                                         currsongposi=i;
  277.                                                                                 }
  278.                                                                         }
  279.                                                                         sp.setSelection(currsongposi);
  280.                                                                         // TODO: Implement this method
  281.                                                                 }
  282.                                                 });
  283.                                         }
  284.                                 });
  285.             break;
  286.           default:
  287.                 break;
  288.         }
  289.         return true;
  290.   }


  291. }
复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

282

主题

4134

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
5852
好评
23
信誉
128

考神MT论坛新人MT论坛最佳新人MT论坛帅哥MT论坛活跃会员MT论坛灌水老大

发表于 2023-7-5 09:06:34 来自手机  | 显示全部楼层  来自 天津
路过看看
回复

使用道具 举报

25

主题

3504

回帖

1万

积分

博士生

相互关注

Rank: 7Rank: 7Rank: 7

金币
2762
好评
23
信誉
95

考神MT论坛最佳新人MT论坛新人

发表于 2023-7-5 09:15:12 来自手机  | 显示全部楼层  来自 河南
很棒的作品
回复

使用道具 举报

13

主题

5044

回帖

1万

积分

博士生

E●机甲FK

Rank: 7Rank: 7Rank: 7

金币
3850
好评
22
信誉
100

MT论坛最佳新人MT论坛帅哥MT论坛新人考神MT论坛活跃会员挂机大佬

QQ
发表于 2023-7-5 09:20:53 来自手机  | 显示全部楼层  来自 安徽
感谢分享
回复

使用道具 举报

7

主题

979

回帖

3309

积分

大学生

Rank: 5Rank: 5

金币
3674
好评
0
信誉
100
发表于 2023-7-5 09:24:39 来自手机  | 显示全部楼层  来自 新疆
感谢分享
回复

使用道具 举报

5

主题

436

回帖

1323

积分

高中生

Rank: 4

金币
981
好评
1
信誉
100
发表于 2023-7-5 09:27:04 来自手机  | 显示全部楼层  来自 广东
感谢分享
回复

使用道具 举报

8

主题

3840

回帖

8798

积分

硕士生

Rank: 6Rank: 6

金币
2937
好评
6
信誉
96
发表于 2023-7-5 09:28:09 来自手机  | 显示全部楼层  来自 广西
路过看看
回复

使用道具 举报

7

主题

2093

回帖

5259

积分

硕士生

Rank: 6Rank: 6

金币
4601
好评
0
信誉
117
发表于 2023-7-5 09:40:30 来自手机  | 显示全部楼层  来自 湖南
感谢分享
回复

使用道具 举报

175

主题

8838

回帖

2万

积分

博士后

Rank: 8Rank: 8

金币
7383
好评
29
信誉
165

MT论坛新人MT论坛帅哥考神MT论坛最佳新人MT论坛灌水老大MT论坛活跃会员

发表于 2023-7-5 10:00:23 来自手机  | 显示全部楼层  来自 河南
感谢分享
回复

使用道具 举报

2

主题

3099

回帖

7267

积分

硕士生

Rank: 6Rank: 6

金币
1623
好评
3
信誉
104
发表于 2023-7-5 10:00:45 | 显示全部楼层  来自 广西–玉林–北流
感谢分享
回复

使用道具 举报

41

主题

1万

回帖

2万

积分

博士后

Rank: 8Rank: 8

金币
6142
好评
3
信誉
98
发表于 2023-7-5 10:01:19 来自手机  | 显示全部楼层  来自 山东
感谢分享
回复

使用道具 举报

12

主题

1482

回帖

4929

积分

大学生

Rank: 5Rank: 5

金币
4493
好评
0
信誉
100
发表于 2023-7-5 10:09:34 来自手机  | 显示全部楼层  来自 山东–枣庄–
感谢大佬
回复

使用道具 举报

24

主题

3542

回帖

7232

积分

硕士生

萌新

Rank: 6Rank: 6

金币
864
好评
23
信誉
122

MT论坛新人考神MT论坛活跃会员MT论坛帅哥

发表于 2023-7-5 10:09:46 来自手机  | 显示全部楼层  来自 江西
感谢分享
回复

使用道具 举报

23

主题

575

回帖

1642

积分

高中生

Rank: 4

金币
621
好评
2
信誉
100

MT论坛新人

发表于 2023-7-5 10:42:59 来自手机  | 显示全部楼层  来自 浙江
感谢分享
回复

使用道具 举报

3

主题

5344

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
4062
好评
0
信誉
90
QQ
发表于 2023-7-5 11:02:48 来自手机  | 显示全部楼层  来自 安徽
感谢分享
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表