zoukankan      html  css  js  c++  java
  • 今日总结

    package me.wcy.music.activity;
    
    import android.Manifest;
    import android.content.Context;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.net.Uri;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    import java.io.File;
    import java.util.Locale;
    
    import me.wcy.music.R;
    import me.wcy.music.constants.Extras;
    import me.wcy.music.constants.RequestCode;
    import me.wcy.music.model.Music;
    import me.wcy.music.utils.CoverLoader;
    import me.wcy.music.utils.FileUtils;
    import me.wcy.music.utils.ImageUtils;
    import me.wcy.music.utils.PermissionReq;
    import me.wcy.music.utils.SystemUtils;
    import me.wcy.music.utils.ToastUtils;
    import me.wcy.music.utils.binding.Bind;
    import me.wcy.music.utils.id3.ID3TagUtils;
    import me.wcy.music.utils.id3.ID3Tags;
    
    public class MusicInfoActivity extends BaseActivity implements View.OnClickListener {
        @Bind(R.id.iv_music_info_cover)
        private ImageView ivCover;
        @Bind(R.id.et_music_info_title)
        private EditText etTitle;
        @Bind(R.id.et_music_info_artist)
        private EditText etArtist;
        @Bind(R.id.et_music_info_album)
        private EditText etAlbum;
        @Bind(R.id.tv_music_info_duration)
        private TextView tvDuration;
        @Bind(R.id.tv_music_info_file_name)
        private TextView tvFileName;
        @Bind(R.id.tv_music_info_file_size)
        private TextView tvFileSize;
        @Bind(R.id.tv_music_info_file_path)
        private TextView tvFilePath;
    
        private Music mMusic;
        private File mMusicFile;
        private Bitmap mCoverBitmap;
    
        public static void start(Context context, Music music) {
            Intent intent = new Intent(context, MusicInfoActivity.class);
            intent.putExtra(Extras.MUSIC, music);
            context.startActivity(intent);
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_music_info);
        }
    
        @Override
        protected void onServiceBound() {
            mMusic = (Music) getIntent().getSerializableExtra(Extras.MUSIC);
            if (mMusic == null || mMusic.getType() != Music.Type.LOCAL) {
                finish();
            }
            mMusicFile = new File(mMusic.getPath());
            mCoverBitmap = CoverLoader.get().loadThumb(mMusic);
    
            initView();
        }
    
        private void initView() {
            ivCover.setImageBitmap(mCoverBitmap);
            ivCover.setOnClickListener(this);
    
            etTitle.setText(mMusic.getTitle());
            etTitle.setSelection(etTitle.length());
    
            etArtist.setText(mMusic.getArtist());
            etArtist.setSelection(etArtist.length());
    
            etAlbum.setText(mMusic.getAlbum());
            etAlbum.setSelection(etAlbum.length());
    
            tvDuration.setText(SystemUtils.formatTime("mm:ss", mMusic.getDuration()));
    
            tvFileName.setText(mMusic.getFileName());
    
            tvFileSize.setText(String.format(Locale.getDefault(), "%.2fMB", FileUtils.b2mb((int) mMusic.getFileSize())));
    
            tvFilePath.setText(mMusicFile.getParent());
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.menu_music_info, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            if (item.getItemId() == R.id.action_save) {
                save();
                finish();
                return true;
            }
            return super.onOptionsItemSelected(item);
        }
    
        @Override
        public void onClick(View v) {
            PermissionReq.with(this)
                    .permissions(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    .result(new PermissionReq.Result() {
                        @Override
                        public void onGranted() {
                            ImageUtils.startAlbum(MusicInfoActivity.this);
                        }
    
                        @Override
                        public void onDenied() {
                            ToastUtils.show(R.string.no_permission_select_image);
                        }
                    })
                    .request();
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (resultCode != RESULT_OK) {
                return;
            }
    
            if (requestCode == RequestCode.REQUEST_ALBUM && data != null) {
                ImageUtils.startCorp(this, data.getData());
            } else if (requestCode == RequestCode.REQUEST_CORP) {
                File corpFile = new File(FileUtils.getCorpImagePath(this));
                if (!corpFile.exists()) {
                    ToastUtils.show("图片保存失败");
                    return;
                }
    
                mCoverBitmap = BitmapFactory.decodeFile(corpFile.getPath());
                ivCover.setImageBitmap(mCoverBitmap);
                corpFile.delete();
            }
        }
    
        private void save() {
            if (!mMusicFile.exists()) {
                ToastUtils.show("歌曲文件不存在");
                return;
            }
    
            ID3Tags id3Tags = new ID3Tags.Builder().setCoverBitmap(mCoverBitmap)
                    .setTitle(etTitle.getText().toString())
                    .setArtist(etArtist.getText().toString())
                    .setAlbum(etAlbum.getText().toString())
                    .build();
            ID3TagUtils.setID3Tags(mMusicFile, id3Tags, false);
    
            // 刷新媒体库
            Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(mMusicFile));
            sendBroadcast(intent);
    
            ToastUtils.show("保存成功");
        }
    }
  • 相关阅读:
    /etc/sysctl.conf 控制内核相关配置文件
    python 并发编程 非阻塞IO模型
    python 并发编程 多路复用IO模型
    python 并发编程 异步IO模型
    python 并发编程 阻塞IO模型
    python 并发编程 基于gevent模块 协程池 实现并发的套接字通信
    python 并发编程 基于gevent模块实现并发的套接字通信
    python 并发编程 io模型 目录
    python 并发编程 socket 服务端 客户端 阻塞io行为
    python 并发编程 IO模型介绍
  • 原文地址:https://www.cnblogs.com/feng747/p/14910489.html
Copyright © 2011-2022 走看看