当前位置 博文首页 > 庆述倾述:Android从相册选择图片,播放多媒体文件

    庆述倾述:Android从相册选择图片,播放多媒体文件

    作者:[db:作者] 时间:2021-08-05 12:47

    1. 从相册载入图片

    类似的,首先添加清单文件中的权限:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    

    然后在代码中动态申请权限,最后使用startActivityForResult来进行请求回调,使用onActivityResult中加载图片。

    public class MainActivity extends AppCompatActivity {
    
        private Button button;
        private ImageView imageView;
        private static final int photoRequestCode = 1;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            button = findViewById(R.id.id_button);
            imageView = findViewById(R.id.id_imageView);
    
            //权限检查
            if (ContextCompat.checkSelfPermission(MainActivity.this,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                //申请权限
                ActivityCompat.requestPermissions(MainActivity.this,
                        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
            }
            if (ContextCompat.checkSelfPermission(MainActivity.this,
                    Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                //申请权限
                ActivityCompat.requestPermissions(MainActivity.this,
                        new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
            }
    
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 打开文件选择器
                    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
                    intent.addCategory(Intent.CATEGORY_OPENABLE);
                    // 指定只显示图片
                    intent.setType("image/*");
                    startActivityForResult(intent, photoRequestCode);
                }
            });
        }
    
        @Override
        protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == photoRequestCode && data != null) {
                Uri uri = data.getData();
                try {
                    // 载入
                    Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
                    imageView.setImageBitmap(bitmap);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

    在这里插入图片描述
    关键代码:

    // 打开文件选择器
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    // 指定只显示图片
    intent.setType("image/*");
    startActivityForResult(intent, photoRequestCode);
    

    2. 播放多媒体文件

    2.1 播放音频文件

    Android中播放音频文件使用MediaPlayer类来实现。
    在这里插入图片描述
    首先随便上传一个mp3SD卡下:
    在这里插入图片描述

    public class MainActivity extends AppCompatActivity {
    
        private Button play;
        private Button stop;
        private MediaPlayer mediaPlayer;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            play = findViewById(R.id.id_button);
            stop = findViewById(R.id.id_button2);
            mediaPlayer = new MediaPlayer();
    
            //权限检查
            if (ContextCompat.checkSelfPermission(MainActivity.this,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                //申请权限
                ActivityCompat.requestPermissions(MainActivity.this,
                        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
            }
            if (ContextCompat.checkSelfPermission(MainActivity.this,
                    Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
                //申请权限
                ActivityCompat.requestPermissions(MainActivity.this,
                        new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
            }
    
            initPlayer();
            play.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(!mediaPlayer.isPlaying())
                        mediaPlayer.start();
                }
            });
    
            stop.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(mediaPlayer.isPlaying())
                        mediaPlayer.pause();  // 不是stop()
                }
            });
        }
    
        private void initPlayer() {
            File file = new File(Environment.getExternalStorageDirectory().toString() + "/Music");
            file = new File(file, "test.mp3");
            try {
                Log.d("TAG", file.getPath());
                mediaPlayer.setDataSource(file.getPath());
                mediaPlayer.prepare();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            mediaPlayer.stop();
            mediaPlayer.release();
        }
    }
    

    通过MediaPlayer类的实例对象,调用mediaPlayer.setDataSource(file.getPath());方法来设置资源文件。一共有三种写法:

    • raw下的资源:MediaPlayer.create(this, R.raw.test);。或者使用Asset资源目录下的文件,通过AssetManager来获取资源路径。
    • ② 本地文件路径:mediaPlayer.setDataSource("/sdcard/test.mp3");
    • ③网络URL文件:mediaPlayer.setDataSource("http://www.xxx.com/music/test.mp3");

    播放网络上的音频,对应的API和上面略有不同,比如:

    下一篇:没有了