您的位置:首页 > 其它

【练习】使用服务下载图片并保存到sdcard

2016-04-15 10:47 281 查看
public class StringUtils {
public static String getStr(String path){
String[] strs = path.split("/");
return strs[strs.length-1];
}
}


public class SdCardUtils {
public static void saveDataToSdcard(byte[] data,String filename){
File file = Environment.getExternalStorageDirectory();
Log.i("Mian",file.getAbsolutePath());
File file2 = new File(file,filename);
try {
FileOutputStream fos = new FileOutputStream(file2);
fos.write(data);
fos.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}


public class MainActivity extends AppCompatActivity {

private ImageView imageView;
private Intent intent ;
private String path = "http://www.baidu.com/img/bdlogo.gif";
private String filename;
private String bitmap_path;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = (ImageView) findViewById(R.id.image);
filename = StringUtils.getStr(path);
bitmap_path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/"+filename;
}

public void download(View view){
intent = new Intent(this,MyService.class);
intent.putExtra("key",path);
startService(intent);
}

public void see(View view){
Bitmap bitmap = BitmapFactory.decodeFile(bitmap_path);
if(bitmap!=null){
imageView.setImageBitmap(bitmap);
}
}
}


public class MyService extends Service {

@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public void onCreate() {
super.onCreate();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
final String path = intent.getStringExtra("key");

new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
int code = conn.getResponseCode();
if (code == 200) {
InputStream is = conn.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024 * 2];
int ret;
while ((ret = is.read(buffer)) > 0) {
baos.write(buffer, 0, ret);
}
//保存到内存卡
SdCardUtils.saveDataToSdcard(baos.toByteArray(), StringUtils.getStr(path));
}

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
return super.onStartCommand(intent, flags, startId);
}

@Override
public void onDestroy() {
super.onDestroy();
}
}


* 图片下载完成后增加通知

优化MyService类

public class MyService extends Service {

private NotificationManager manager;
private NotificationCompat.Builder builder;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public void onCreate() {
super.onCreate();
manager = (NotificationManager) getSystemService(Service.NOTIFICATION_SERVICE);
builder = new NotificationCompat.Builder(getApplicationContext());
builder.setAutoCancel(true);
builder.setContentText("下载完成");
builder.setContentTitle("通知");
builder.setSmallIcon(R.mipmap.ic_launcher);
Intent intent = new Intent(this,MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(),0,intent,PendingIntent.FLAG_ONE_SHOT);
builder.setContentIntent(pendingIntent);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
final String path = intent.getStringExtra("key");

new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
int code = conn.getResponseCode();
if (code == 200) {
InputStream is = conn.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024 * 2];
int ret;
while ((ret = is.read(buffer)) > 0) {
baos.write(buffer, 0, ret);
}
//保存到内存卡
SdCardUtils.saveDataToSdcard(baos.toByteArray(), StringUtils.getStr(path));
manager.notify(1,builder.build());
}

} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
return super.onStartCommand(intent, flags, startId);
}

@Override
public void onDestroy() {
super.onDestroy();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: