当前位置:首页 > 0804032048-樊瑾-毕业论文 - 图文
合肥学院计算机科学与技术系毕业论文
android:layout_height=\ android:layout_gravity=\
4.2 后台数据库交互功能模块分析
4.2.1数据库连接
Android中自带SQLite数据库,这是一个十分小型的数据库,这样正适合Android这种移动平台使用。
Android数据库存储的位置在data/data/<项目文件夹>/databases/目录下 Android是利用ContentProvider作为内容提供商,SQLiteOpenHelper数据库帮助类来进行对数据库的创建和操作。通过Context.getContentResolver()方法直接对数据库进行操作。程序中数据库类为DBHelper extends SQLiteOpenHelper(继承关系),内容提供类DBProvider extends ContentProvider(继承关系)
Android自带一个MediaStore封闭类 专门来存储媒体信息,通过Uri EXTERNAL_CONTENT_URI 来访问,获得SDcard中的歌曲详细信息。
Cursor mAudioCursor = getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, // 查询条件 询条件
null, // 条件的对应?的参数
MediaStore.Video.VideoColumns.TITLE// 排序方式 );
null, // 条件的对应?的参数
MediaStore.Audio.AudioColumns.TITLE// 排序方式
);
MediaStore.Video.Media.EXTERNAL_CONTENT_URI, null, null, // 查
Cursor VudioCursor = getContentResolver().query(
4.2.2数据库操作
当数据库需更新时,比如添加歌曲或者删除歌曲之后,Android系统并不会主动更新数据库只有程序重启或手机重启时Android会更新Media数据库,于是当进行了数据库操作时就需要通知系统更新数据库方法如下:
private void scanSdCard() {
IntentFilter intentFilter = new IntentFilter(
Intent.ACTION_MEDIA_SCANNER_STARTED);
24
intentFilter.addAction(Intent.ACTION_MEDIA_SCANNER_FINISHED);
合肥学院计算机科学与技术系毕业论文
}
intentFilter.addDataScheme(\scanReceiver = new ScanSdFilesReceiver(); registerReceiver(scanReceiver, intentFilter);
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse(\
+ Environment.getExternalStorageDirectory()
.getAbsolutePath())));
并注册广播接收器:
private class ScanSdFilesReceiver extends BroadcastReceiver { }
public void onReceive(Context context, Intent intent) { }
String action = intent.getAction();
if (Intent.ACTION_MEDIA_SCANNER_STARTED.equals(action)) { }
if (Intent.ACTION_MEDIA_SCANNER_FINISHED.equals(action)) { }
// 当系统扫描完毕时,停止显示等待框,并重新查询ContentProvider movieListData.clear(); // 获取歌曲 getVideoSD(); // 刷新列表 refreashmovielist(); myDialog.dismiss();
// 当系统开始扫描sd卡时,为了用户体验,可以加上一个等待框 System.out.println(\
这样既可在进行相关文件增删改查时同步更新数据库。
4.3 多媒体文件播放模块分析
4.3.1音频文件播放:
MediaPlayer是Android封装好的可以直接用来管理多媒体文件的工具类,可以使用直接new的方式:MediaPlayer mp = new MediaPlayer(); MediaPlayer要播放的文件主要包括3个来源:
25
合肥学院计算机科学与技术系毕业论文
a. 用户在应用中事先自带的resource资源例如:MediaPlayer.create(this, R.raw.test);
b. 存SD卡或其他文件路径下的媒体文件例如:mp.setDataSource(\
c. 网络上的媒体文件例如:
mp.setDataSource(\
对播放器的主要控制方法:
Android通过控制播放器的状态的方式来控制媒体文件的播放,其中:prepare()和prepareAsync() 提供了同步和异步两种方式设置播放器进入prepare状态,需要注意的是start()是真正启动文件播放的方法,pause()和stop()比较简单,起到暂停和停止播放的作用,seekTo()是定位方法,可以让播放器从指定的位置开始播放,需要注意的是该方法是个异步方法,也就是说该方法返回时并不意味着定位完成,尤其是播放的网络文件,真正定位完成时会触发OnSeekComplete.onSeekComplete(),如果需要是可以调用setOnSeekCompleteListener(OnSeekCompleteListener)设置监听器来处理的。release()可以释放播放器占用的资源,一旦确定不再使用播放器时应当尽早调用它释放资源。reset()可以使播放器从Error状态中恢复过来,重新会到Idle状态。
在本软件中把音乐文件播放的相关操作整合到一个类中整理成方法已被调用,代码如下:
public static void start(String AUDIO_PATH) { }
public static void playAudio(String url) {
try {
mediaPlayer.setDataSource(url); mediaPlayer.prepare();
26
if (mediaPlayer.isPlaying()) { }
playbackPosotion = mediaPlayer.getCurrentPosition(); mediaPlayer.pause();
MusicPlayerActivity.startButton
.setImageResource(R.drawable.appwidget_icon_play_normal);
} else {
mediaPlayer.seekTo(playbackPosotion); mediaPlayer.start();
MusicPlayerActivity.startButton
.setImageResource(R.drawable.appwidget_icon_pause_normal);
合肥学院计算机科学与技术系毕业论文
}
}
mediaPlayer.start();
// TODO Auto-generated catch block e.printStackTrace();
// TODO Auto-generated catch block e.printStackTrace();
// TODO Auto-generated catch block e.printStackTrace();
} catch (IllegalArgumentException e) {
} catch (IllegalStateException e) {
} catch (IOException e) {
public static void killMediaplayer() {
if (mediaPlayer != null) { }
mediaPlayer.reset();
4.3.2视频文件播放:
视频播放比音频播放要复杂一些,除了音频之外,还需要考虑一个视觉组件。为了解决这一问题,Android提供了一个专门的视图控制器 android.widget.VideoView,封装了MediaPlayer的创建和初始化过程,这个小部件可以用在任何布局管理器中,而且它提供了很多显示选项,包括缩放和着色。要实现播放功能,我们要做的是,创建一个VideoView小部件并将其设置为用户界面的内容,然后设置视图的路径或 URI并触发start()方法。
视频播放除了需要按钮控件外,还需要一个显示视频的框架。对于我们这个例子,这里使用VideoView组件显示视频内容,没有创建我们自己的按钮控件,而是创建了一个MediaController来提供这些按钮(如果需要另外创建的话,也可以自己创建)。
Java部分代码:
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub super.onCreate(savedInstanceState); this.setContentView(R.layout.movieplayer);
VideoView vv = (VideoView) findViewById(R.id.videoView); // vv=new VideoView(this);
MediaController mc = new MediaController(this); vv.setMediaController(mc);
27
共分享92篇相关文档