• 23 服务的启动Demo2


    这里写图片描述
    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>
    
  • 相关阅读:
    12
    11
    10
    9
    8
    6. iOS APP 设计规范大全
    4. iOS中常用演示方法以及利弊
    我要写一篇动态计算tableView-cell高度的随笔
    doclever 5.5.1 安装及升级【原创】
    SPARROW-JS 从0开始写 0依赖,原生JS框架
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152186.html
Copyright © 2020-2023  润新知