首页 > 代码库 > java攻城狮之路(Android篇)--MP3、MP4、拍照、国际化、样式主题、图片移动和缩放
java攻城狮之路(Android篇)--MP3、MP4、拍照、国际化、样式主题、图片移动和缩放
一、MP3播放器
查看Android API文档可以看到MediaPlayer状态转换图:
练习:
package com.shellway.mp3player;import java.io.File;import java.io.IOException;import android.support.v7.app.ActionBarActivity;import android.telephony.PhoneStateListener;import android.telephony.TelephonyManager;import android.content.Context;import android.media.MediaPlayer;import android.media.MediaPlayer.OnPreparedListener;import android.os.Bundle;import android.os.Environment;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends ActionBarActivity { //媒体播放器 private MediaPlayer mp; private EditText songName; //之前是否暂停过 private boolean pause; private File file; private TelephonyManager tm; //暂停保存点 private int position = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); songName = (EditText) findViewById(R.id.song_name); tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); tm.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE); } private class MyPhoneStateListener extends PhoneStateListener{ @Override public void onCallStateChanged(int state, String incomingNumber) { // TODO Auto-generated method stub super.onCallStateChanged(state, incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_IDLE://闲置状态 if (position > 0 && mp != null) { //跳转到指定的保存点位置 mp.seekTo(position); mp.start(); } break; case TelephonyManager.CALL_STATE_OFFHOOK://接听状态 if(mp != null){ if(mp.isPlaying()){ position = mp.getCurrentPosition(); mp.pause(); } } break; case TelephonyManager.CALL_STATE_RINGING://响铃状态 if (mp.isPlaying()) { position = mp.getCurrentPosition(); mp.pause(); } break; default: break; } } }//这里是利用Activity生命周期的方法监听来电时暂停播放// @Override// protected void onResume() {// // TODO Auto-generated method stub// super.onResume();// if(position > 0){// //跳转到指定的位置// mp.seekTo(position);// mp.start();// }// }// // @Override// protected void onPause() {// // TODO Auto-generated method stub// super.onPause();// position = mp.getCurrentPosition();// mp.pause();// } public void play(View view){ String name = songName.getText().toString(); file = new File(Environment.getExternalStorageDirectory(),name+".mp3"); if (!file.exists()) { Toast.makeText(this, "文件不存在", Toast.LENGTH_SHORT).show(); mp=null; }else{ if (mp!=null) { if (mp.isPlaying()) { Toast.makeText(this, "歌曲已经在播放中", Toast.LENGTH_SHORT).show(); }else{ play(); } }else{ play(); } } } public void play(){ try { mp = new MediaPlayer(); //置为初始状态 mp.reset(); //指定要播放的文件 mp.setDataSource(file.getAbsolutePath()); //准备(缓冲) mp.prepare(); //设置缓冲完成监听 mp.setOnPreparedListener(new MyOnPreparedListener()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } private class MyOnPreparedListener implements OnPreparedListener{ @Override public void onPrepared(MediaPlayer mp) { // TODO Auto-generated method stub //播放 mp.start(); } } public void pause(View view){ if (mp.isPlaying()) { //暂停播放 mp.pause(); Button bt = (Button) view; bt.setText("继续"); pause = true; }else{ if (pause) { mp.start(); Button bt = (Button) view; bt.setText("停止"); } } } public void stop(View view){ if (mp!=null) { //停止播放 mp.stop(); } } public void reset(View view){ if (mp!=null) { mp.start(); } } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); if (mp != null) { mp.release(); mp = null; } }}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="请输入歌曲名" /> <EditText android:id="@+id/song_name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Complicated" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="play" android:text="播放" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="pause" android:text="暂停" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="stop" android:text="停止" /> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:onClick="reset" android:text="重播" /> </LinearLayout></LinearLayout>
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.shellway.mp3player" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="21" /> <!-- 监听来电状态需要读取电话状态权限 --> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest>
运行结果截图:
二:MP4播放器
稍等,努力更新中。。。。
java攻城狮之路(Android篇)--MP3、MP4、拍照、国际化、样式主题、图片移动和缩放
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。