android Service实现后台下载

功能:点击按钮,启动一个Service下载指定地址的内容,并且将内容保存到Sdcard卡,下载时发送一个进度条通知到通知栏。

这里写图片描述

Activity 类:

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;

public class MainActivity extends Activity {
    private String PATH = "http://e.hiphotos.baidu.com/image/pic/item/63d9f2d3572c11dfbdb69872612762d0f703c27f.jpg";//数据地址,这里给了一张图片地址
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.button1).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(MainActivity.this, GetPictures.class);
                intent.putExtra("PATH", PATH);//传递一个参数
                startService(intent);//开启服务
            }
        });
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

Service 继承类:

import java.io.ByteArrayOutputStream;
import java.io.InputStream;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.widget.Toast;

public class GetPictures extends Service {
    private String PATH = "";
    private Notification.Builder builder;
    private NotificationManager manager;
    private Handler handler = new Handler() {// 消息队列
        @Override
        public void handleMessage(android.os.Message msg) {
            super.handleMessage(msg);
            if (msg.what == 1) {
                stopSelf();
                Toast.makeText(getApplicationContext(), "下载完成", 1).show();
            }
        }
    };

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        builder = new Notification.Builder(getApplicationContext());
        builder.setSmallIcon(R.drawable.ic_launcher).setTicker("下载图片")
                .setContentTitle("图片下载").setContentText("正在下载图片")
                .setAutoCancel(true);// 用户点击浏览一次后,通知消失;
    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO Auto-generated method stub
        PATH = intent.getStringExtra("PATH");// 接受传递过来的参数
        new myTast().start();// 创建一个新的线程并且启动
        return super.onStartCommand(intent, flags, startId);

    }

    public class myTast extends Thread implements Runnable {
        @Override
        public void run() {
            // TODO Auto-generated method stub
            super.run();
            HttpClient client = new DefaultHttpClient();
            HttpGet get = new HttpGet(PATH);
            HttpResponse httpResponse;
            InputStream inputStream = null;
            ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
            int len = 0;
            int len_data = 0;
            byte[] data = new byte[512];
            try {
                httpResponse = client.execute(get);
                long len_long = httpResponse.getEntity().getContentLength();
                if (httpResponse.getStatusLine().getStatusCode() == 200) {
                    ToSdcard to = new ToSdcard();
                    inputStream = httpResponse.getEntity().getContent();
                    while ((len = inputStream.read(data)) != -1) {
                        arrayOutputStream.write(data, 0, data.length);
                        len_data += len;
                        int progress_value = (int) ((len_data / (float) len_long) * 100);//进度条刻度计算
                        builder.setProgress(100, progress_value, false);
                        manager.notify(1000, builder.build());
                    }
                    boolean flag = to.saver("bb.png",//保存的文件名
                            arrayOutputStream.toByteArray());// 数据保存到本地Sdcard
                    builder.setContentText("下载完成!");
                    manager.notify(1000, builder.build());
                    if (flag) {
                        handler.sendEmptyMessage(1);
                    }
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}
布局文件中只有一个按钮,就不贴源码了,记得在清单文件中声明服务以及获取连网权限和Sdcard卡读写权限
<service android:name=".GetPictures"></service>
 <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

http://blog.csdn.net/q296264785/article/details/53155739

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在 Android Service实现后台播放音乐,可以使用 MediaPlayer 类或 ExoPlayer 库。以下是简单的步骤: 1. 创建 Service 类并在 onStartCommand() 方法中初始化 MediaPlayer 或 ExoPlayer。 2. 设置 MediaPlayer 或 ExoPlayer 的数据源和监听器。 3. 调用 MediaPlayer 或 ExoPlayer 的 prepare() 方法。 4. 开始播放音乐。 5. 在 Service 中重写 onDestroy() 方法,停止音乐播放并释放 MediaPlayer 或 ExoPlayer。 6. 在 AndroidManifest.xml 文件中声明 Service。 请注意,为了在后台播放音乐,您需要获取音频焦点,并在失去焦点时暂停音乐播放。您还需要在 Service 中管理通知,以便用户可以在通知栏中控制音乐播放。 以下是一个示例代码片段,用于在 Android Service 中使用 MediaPlayer 播放音乐: ``` public class MusicService extends Service implements MediaPlayer.OnPreparedListener { private MediaPlayer mediaPlayer; @Override public void onCreate() { super.onCreate(); mediaPlayer = new MediaPlayer(); mediaPlayer.setOnPreparedListener(this); try { mediaPlayer.setDataSource("your_audio_file_url"); } catch (IOException e) { e.printStackTrace(); } mediaPlayer.prepareAsync(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); } return START_STICKY; } @Override public void onDestroy() { super.onDestroy(); if (mediaPlayer != null) { mediaPlayer.release(); mediaPlayer = null; } } @Override public void onPrepared(MediaPlayer mp) { mp.start(); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值