android的异步下载文件,即在非ui主线程之外,用新的线程下载mp3文件。达到ui主线程正常运行的状态下,异步下载文件。
考虑的实现方式有两种:1.在使用HandlerThread绑定handler,并在handler处理消息队列的(onhandlerMessage())方法中下载mp3文件,下边是代码。
public class Mp3ListActivity extends ListActivity {
private List<Map<String,String>> mplist=null;
private Handler handle=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mp3list);
Intent intent=getIntent();
List<Mp3Bean> list=(ArrayList<Mp3Bean>) intent.getSerializableExtra("list");
mplist=new ArrayList<Map<String,String>>();
Map<String,String> map=null;
for(Mp3Bean bean:list){
map=new HashMap<String,String>();
map.put("id", bean.getId());
map.put("name", bean.getName());
map.put("ip", bean.getIp());
System.out.println("id"+bean.getId()+"=====name:"+bean.getName());
mplist.add(map);
}
ListAdapter adapter=new SimpleAdapter(this, mplist, R.layout.mp3_item, new String[]{"id","name","ip"}, new int[]{R.id.id,R.id.name,R.id.ip});
setListAdapter(adapter);
HandlerThread thread=new HandlerThread("down");
thread.start();
handle=new MyHandler(thread.getLooper());
}
/*
* 列表被选中
*/
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Map<String,String> map=this.mplist.get(position);
Message msg=handle.obtainMessage();
msg.obj=map;
msg.sendToTarget();
//通过handlerThread来下载文件
}
private class MyHandler extends Handler{
public MyHandler(Looper looper) {
super(looper);
}
/* (non-Javadoc)
* @see android.os.Handler#handleMessage(android.os.Message)
*/
@Override
public void handleMessage(Message msg) {
Map<String,String> map=(Map<String, String>) msg.obj;
String urlStr=map.get("ip");
//在线程中下载文件
HttpDownUtil down=new HttpDownUtil(urlStr);
int a=down.downURLMp3("ova/", map.get("name"));
if(a==0){
Toast.makeText(Mp3ListActivity.this, "下载成功", Toast.LENGTH_LONG).show();
}else if(a==1){
Toast.makeText(Mp3ListActivity.this, "文件已经下载", Toast.LENGTH_LONG).show();
}else{
Toast.makeText(Mp3ListActivity.this, "下载错误", Toast.LENGTH_LONG).show();
}
}
}
2.第二中实现方式是在service中启动新线程并用notification来通知用户更改ui界面的显示:
public class Mp3DownService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Mp3Bean bean=(Mp3Bean) intent.getSerializableExtra("bean");
//创建下载文件的线程
Thread t=new Thread(new DownThread(bean));
t.start();
return super.onStartCommand(intent, flags, startId);
}
private class DownThread implements Runnable{
Mp3Bean bean=null;
public DownThread(Mp3Bean bean){
this.bean=bean;
}
public void run() {
String mp3UrlStr="http://192.168.1.2:8888/download/"+bean.getMp3name();
HttpDown down=new HttpDown(mp3UrlStr);
int a=down.downMp3("ova/", bean.getMp3name());
String resault="";
if(a==0){
resault="文件下载成功!";
}else if(a==1){
resault="文件已经存在!";
}else{
resault="下载出错!";
}
//Notification来通知用户修改ui界面
}
}
新手水品,有任何问题,欢迎留言。
分享到:
相关推荐
以下是一些关于如何在Android中读取SD卡中MP3文件的关键知识点: 1. **文件系统访问**:Android设备上的外部存储(通常称为SD卡)被模拟为一个文件系统,可以使用Java的`java.io.File`类来操作。首先,你需要获取SD...
在Android平台上,流媒体播放远程MP3文件是一个常见的需求,特别是在音乐播放应用或者在线音频服务中。本示例代码提供了一种实现方式,通过下载并缓存一部分音频数据,然后利用`MediaPlayer`进行播放,实现了类似流...
4. **文件存储**:下载的MP3文件需要存储在设备上,Android提供了多种文件存储方式,如内部存储、外部存储(SD卡)。开发者需要根据Android版本和权限策略选择合适的存储路径,并使用File类进行文件操作。 5. **...
首先,播放本地MP3文件通常涉及的是对Android系统提供的MediaPlayer类的使用。MediaPlayer是Android系统提供的一个核心组件,它可以处理各种音频和视频格式的播放。对于本地MP3文件,我们通常将其放在res/raw目录下...
在Android平台上,从Web服务器下载文件,如APK或MP3,并实时显示下载进度条,是常见的需求。这个过程涉及到网络编程、文件操作以及UI更新等多个技术环节。下面将详细介绍这些知识点。 首先,我们需要理解Android的...
3. **MediaPlayer类**:这是Android系统提供的音频播放组件,可以用来播放本地或网络上的MP3文件。开发者需要实例化`MediaPlayer`对象,设置数据源,准备并开始播放音乐。 4. **MediaController类**:提供了一个UI...
三、文件下载 1. 使用OkHttp:创建OkHttpClient实例,配置请求参数,通过RequestBody构造上传请求,然后使用enqueue方法发起异步下载请求。下载完成后,可以使用InputStream和 FileOutputStream将数据写入本地文件。...
这是一个基于android平台开发的一个MP3播放器,所使用的技术有AsyncTask 异步搜索sd卡下的mp3文件,ViewPager listview 做ui显示,启动服务播放MP3,服务器搜索MP3,多线程下载MP3,现在播放,上一首,下一首,暂停/...
这个示例展示了如何在Android应用中使用`MediaPlayer`组件播放MP3文件,包括设置数据源、准备播放、处理播放状态变化等关键步骤。通过阅读`MediaPlayerDemo`项目的源代码,你可以更深入地理解这些概念,并将其应用于...
3. **文件I/O操作**:在Android中,获取到设备存储上的MP3文件需要进行文件I/O操作。开发者需要掌握如何使用File类和ContentResolver来访问文件路径或URI。 4. **播放列表管理**:一个完整的播放器通常需要支持播放...
2. **AndroidManifest.xml**:在项目的根目录下,这个文件是应用的配置文件,你需要在此声明所需的权限,例如读取外部存储(READ_EXTERNAL_STORAGE)权限,因为播放MP3文件通常需要访问SD卡。 3. **文件扫描**:...
Android提供了`Environment.getExternalStorageDirectory()`方法获取外部存储(如SD卡)的根目录,然后通过文件路径或ContentProvider的URI来定位mp3文件。 3. **媒体库集成**:Android媒体库可以自动扫描并管理...
在Android中,我们可以使用ffmpeg库解析mp3文件,将其转换为Android系统能够识别的音频格式,如PCM,然后通过AudioTrack或OpenSL ES进行播放。 4. **NDK**: (Native Development Kit) 是Android的一个补充工具,...
在Android平台上,音频播放...提供的压缩包文件“audio”可能包含了一个简单的Android项目,演示了上述知识点的应用,可以下载后直接运行学习。通过这个示例,你可以更直观地理解如何在Android应用中实现音频播放功能。
音频文件下载完成后,可以使用Android的`MediaPlayer`类进行播放。`MediaPlayer`可以处理多种音频格式,提供播放、暂停、停止等控制。 9. **生命周期管理**: 如果在Activity或Fragment中处理下载,需要考虑它们...
当音乐文件下载完成后,MediaPlayer应能自动切换到本地文件播放。 总的来说,实现“边下载边播放音乐,有播放进度和缓冲效果”的功能,需要综合运用Android的下载管理、多媒体播放、广播接收和UI更新等技术。开发者...
本地SD卡中的歌曲列表界面则展示已存储在设备上的MP3文件,通常需要实现列表或网格视图来展示歌曲信息,如歌名、歌手、专辑封面等。 2. **媒体库访问**:Android提供了`MediaStore`类,用于访问设备上的媒体文件,...
【Android平台mp3简易播放器】是一个针对Android设备开发的音乐播放应用,旨在提供基本的音乐播放功能,如搜索MP3文件、歌词同步显示、歌曲分类等。以下是该播放器的关键知识点: 1. **文件搜索与数据库管理**: -...
在Android平台上开发应用程序时,...综上所述,Android应用开发中处理MP3文件主要涉及`MediaPlayer`的使用,文件的存储与访问,以及音频控制和资源管理。理解这些知识点,可以帮助开发者创建出功能完善的音乐播放应用。
3. **文件操作**:播放器需要能够读取MP3文件,这涉及到Android的文件I/O操作。可能使用`File`类来定位和打开MP3文件,或者使用`ContentResolver`来访问外部存储上的媒体文件。 4. **用户界面(UI)设计**:一个...