23 服务的启动Demo2
2016-09-22 22:26
218 查看
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>
相关文章推荐
- 23 服务的绑定启动Demo3
- 23 服务的绑定启动Demo3
- 23 服务音乐的启动Demo4
- 23 服务的启动Demo2
- 23 服务音乐的启动Demo4
- 23 服务的创建Demo1
- Windows Service 使用参数安装DEMO,可使用控制台启动方式进行调试,服务安装完后立即启动
- 23 服务IntentService Demo6
- 23 广播服务结合音乐Demo5
- 23 广播服务结合音乐Demo5
- 23 服务的创建Demo1
- 23 服务IntentService Demo6
- 配置服务启动选项
- linux的启动进程与服务 (二)
- MySQL服务无法启动【错误代码1067】的解决方法
- linux启动服务解释大全(请大家知道一点加一点,接龙来完成)
- 监控一个web服务的讨论(如果weblogic服务死掉了,让其自动启动)
- SAP服务实例无法启动了怎么办?
- Google启动视频搜索服务(zz)
- sourceoffsite,sos_collab,版本控制,安装过程中不能创建数据,相关服务无法启动