今日总结

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("保存成功");
    }
}
原文地址:https://www.cnblogs.com/feng747/p/14910489.html