23 服务的启动Demo2

来源:互联网 发布:软件开发流程工具 编辑:程序博客网 时间:2024/05/15 15:35

这里写图片描述
MainActivity.java

package com.qf.day23_service_demo2;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.TextView;public class MainActivity extends Activity {    private String iamgUrl = "https://ss2.baidu.com/6ONYsjip0QIZ8tyhnq/it/u=2507878052,3446525205&fm=58";    private TextView tv;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);         tv = (TextView) findViewById(R.id.tv);        BroadcastReceiver broadcastReceiver = new BroadcastReceiver(){            @Override            public void onReceive(Context context, Intent intent) {                tv.setText("去死吧");                Log.e("fmy", "嘿嘿");            }        };        IntentFilter intentFilter = new IntentFilter();        intentFilter.addAction("fmy.fmy.fmy");        registerReceiver(broadcastReceiver, intentFilter);    }    //点击按钮  开启服务下载数据    public void MyLoadClick(View v){        Intent intent = new Intent();        intent.setAction("com.qf.day23_service_demo2.MyLoaderService");        intent.putExtra("imagUrl", iamgUrl);        //API 23以上需要加上 不然报错//      intent.setPackage(getPackageName());        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.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 Service{    String imagUrl ="";    @Override    public IBinder onBind(Intent intent) {        // TODO Auto-generated method stub        return null;    }    @Override    public int onStartCommand(Intent intent, int flags, int startId) {        imagUrl = intent.getStringExtra("imagUrl");        //开启下载        new Thread(){            public void run() {                //判断网络状态                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();                            Intent intent2 = new Intent("fmy.fmy.fmy");                            sendBroadcast(intent2);                            //服务自己关闭服务                            stopSelf();                        }                    }else{                        Log.e("AAA", "Sd卡不可用");                    }                }else{                    Log.e("AAA", "网络异常");                }            };        }.start();        return super.onStartCommand(intent, flags, startId);    }    //发送广播    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;    }}

AndroidManifest.xml

<?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="com.qf.day23_service_demo2.MyLoaderService">            <intent-filter >                <action android:name="com.qf.day23_service_demo2.MyLoaderService"/>            </intent-filter>        </service>    </application></manifest>
0 0
原创粉丝点击