当前位置 博文首页 > 庆述倾述:Android从相册选择图片,播放多媒体文件
类似的,首先添加清单文件中的权限:
<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);
在Android
中播放音频文件使用MediaPlayer
类来实现。
首先随便上传一个mp3
到SD
卡下:
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");
mediaPlayer.setDataSource("http://www.xxx.com/music/test.mp3");
播放网络上的音频,对应的API
和上面略有不同,比如: