23 服务IntentService Demo6

这里写图片描述

MainActivity.java

package com.qf.day23_service_demo2;

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

public class MainActivity extends Activity {

    private String iamgUrl = "https://ss2.baidu.com/6ONYsjip0QIZ8tyhnq/it/u=2507878052,3446525205&fm=58";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    //点击按钮  开启服务下载数据
    public void MyLoadClick(View v){

        Intent intent = new Intent();
        intent.setAction("com.qf.day23_service_demo2.MyLoaderService");
        intent.putExtra("imagUrl", iamgUrl);
        startService(intent);

    }
    //点击按钮  停止服务
    public void StopServiceClick(View v){
        Intent intent = new Intent();
        intent.setAction("com.qf.day23_service_demo2.MyLoaderService");
        stopService(intent);

    }



}

MyLoaderService.java

package com.qf.day23_service_demo2;

import com.qf.day23_service_demo2.utils.FileUtils;
import com.qf.day23_service_demo2.utils.HttpUtils;

import android.app.IntentService;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.os.IBinder;
import android.support.v4.app.NotificationCompat;
import android.util.Log;

public class MyLoaderService extends IntentService {

    String imagUrl = "";

    public MyLoaderService(String name) {
        super(name);
        // TODO Auto-generated constructor stub
    }

    public MyLoaderService() {
        super("");
        // TODO Auto-generated constructor stub
    }

    // 开启了线程
    @Override
    protected void onHandleIntent(Intent intent) {
        // TODO Auto-generated method stub
        imagUrl = intent.getStringExtra("imagUrl");
        // 开启下载

        // 判断网络状态
        if (HttpUtils.isNetWork(MyLoaderService.this)) {
            // 开始下载
            byte[] buffer = HttpUtils.getData(imagUrl);
            // 保存在SD卡
            if (FileUtils.isConnSdCard()) {
                // 保存到 Sd卡
                boolean flag = FileUtils.writeToSdcard(buffer, imagUrl);
                if (flag) {
                    Log.e("AAA", "下载完成");
                    // 发送广播
                    sendNotification();
                    // 服务自己关闭服务
                    stopSelf();
                }

            } else {
                Log.e("AAA", "Sd卡不可用");
            }

        } else {
            Log.e("AAA", "网络异常");
        }

    }

    // 发送广播
    public void sendNotification() {

        // 要传递的图片名称
        imagUrl = imagUrl.substring(imagUrl.lastIndexOf("/") + 1);

        NotificationCompat.Builder builder = new NotificationCompat.Builder(
                getApplicationContext());
        builder.setContentTitle("下载美女图");
        builder.setContentText("景甜");
        builder.setSmallIcon(R.drawable.ic_launcher);

        Intent intent = new Intent(MyLoaderService.this, SecondActivity.class);
        intent.putExtra("imagUrl", imagUrl);
        PendingIntent pendingIntent = PendingIntent.getActivity(
                getApplicationContext(), 100, intent,
                PendingIntent.FLAG_ONE_SHOT);
        builder.setContentIntent(pendingIntent);

        NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        manager.notify(1, builder.build());
    }

}

SecondActivity.java

package com.qf.day23_service_demo2;

import java.io.File;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Environment;
import android.widget.ImageView;

public class SecondActivity extends Activity {

    private ImageView iv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        setContentView(R.layout.layout);
        iv = (ImageView) findViewById(R.id.iv);

        String imagUrl = getIntent().getStringExtra("imagUrl");

        File file = new File(Environment.
                getExternalStoragePublicDirectory(
                        Environment.DIRECTORY_DOWNLOADS), imagUrl);

        String pathName = file.getAbsolutePath();

        Bitmap bp = BitmapFactory.decodeFile(pathName);

        iv.setImageBitmap(bp);
    }

}

FileUtils.java

package com.qf.day23_service_demo2.utils;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import android.os.Environment;

public class FileUtils {

    /**
     * 判断sdCard是否挂载
     * @return
     */
    public static boolean isConnSdCard(){
        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
            return true;
        }
        return false;
    }
    /**
     * 将图片的字节数组保存到  sd卡上
     * @return
     */
    public static boolean writeToSdcard(byte[] buffer ,String imagName){
        FileOutputStream outputStream =null;

        boolean flag = false;

        String fileName = imagName.substring(imagName.lastIndexOf("/")+1);
        File file = new File(Environment.
                getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
                fileName);
        try {

            outputStream = new FileOutputStream(file);
            outputStream.write(buffer);
            flag = true;
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            if(outputStream!=null){
                try {
                    outputStream.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

        return flag;

    }

}

HttpUtils.java

package com.qf.day23_service_demo2.utils;

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

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

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

public class HttpUtils {
    /**
     * 判断是否有网络
     * @param context
     * @return
     */
    public static boolean isNetWork(Context context){
        //得到网络的管理者
        ConnectivityManager manager = (ConnectivityManager) 
                context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo info = manager.getActiveNetworkInfo();

        if(info!=null){
            return true;

        }else{
            return false;
        }

    }


    /**
     * 获取数据
     * @param path
     * @return
     */
    public static byte[] getData(String path) {
        HttpClient httpClient = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(path);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        try {
            HttpResponse response = httpClient.execute(httpGet);
            if (response.getStatusLine().getStatusCode() == 200) {
                InputStream inputStream = response.getEntity().getContent();
                byte[] buffer = new byte[1024];
                int temp = 0;
                while ((temp = inputStream.read(buffer)) != -1) {
                    outputStream.write(buffer, 0, temp);
                    outputStream.flush();
                }

            }
            return outputStream.toByteArray();

        } catch (ClientProtocolException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return null;

    }

}

清单文件

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.qf.day23_service_demo2"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.qf.day23_service_demo2.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>
        <activity android:name=".SecondActivity"></activity>
        <service android:name=".MyLoaderService">
            <intent-filter >
                <action android:name="com.qf.day23_service_demo2.MyLoaderService"/>
            </intent-filter>
        </service>
    </application>

</manifest>
原文地址:https://www.cnblogs.com/muyuge/p/6152182.html