ブレークポイントの継続をサポートするandroidコード
15346 ワード
package com.nico;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import com.configue.Const;
import com.download.DownloadService;
import com.download.DownloadService.MyDownLoadThread;
import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.view.ViewDebug.FlagToString;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class DownLoadPage extends Activity implements OnClickListener {
Br receiver = null;
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
this.unregisterReceiver(receiver);
Const.isDownloading = false;
}
private ProgressBar pb;
private TextView txt;
private NotificationManager nm;
private Button btn;
public DownloadService ds = new DownloadService();
int percent = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
Intent intent = new Intent(DownLoadPage.this, DownloadService.class);
Bundle bd = new Bundle();
bd.putString("path", Environment.getExternalStorageDirectory()
.getAbsolutePath());
bd.putString("url", Const.url + "test.rar");
intent.putExtras(bd);
startService(intent);
nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
setContentView(R.layout.downloadpage);
pb = (ProgressBar) findViewById(R.id.progressbar);
txt = (TextView) findViewById(R.id.loadingtips);
btn = (Button) findViewById(R.id.btn);
btn.setText(" ");
btn.setOnClickListener(this);
receiver = new Br();
IntentFilter intentfilter = new IntentFilter();
intentfilter.addAction("com.nico.downloadpage");
this.registerReceiver(receiver, intentfilter);
showNotify();
}
public class Br extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
percent = intent.getIntExtra("percent", 0);
pb.setProgress(percent);
txt.setText(percent + "%");
if (percent == 100) {
txt.setText(" ");
btn.setText(" ");
nm.cancel(11111);
}
}
}
public void showNotify() {
Notification ntf = new Notification(R.drawable.icon, " ", System
.currentTimeMillis());
Intent i = new Intent();
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent intent = PendingIntent.getActivity(this, 0, i,
PendingIntent.FLAG_UPDATE_CURRENT);
ntf.setLatestEventInfo(DownLoadPage.this, " ", " ", intent);
nm.notify(11111, ntf);
}
@Override
public void onClick(View v) {
if (v == btn) {
if (percent < 100 && percent > 0 && Const.isDownloading) {
btn.setText(" ");
stopService(new Intent(DownLoadPage.this, DownloadService.class));
} else if (percent == 100) {
btn.setText(" ");
Const.isDownloading = false;
btn.setClickable(false);
} else {
btn.setText(" ");
Const.isDownloading = true;
startService(new Intent(DownLoadPage.this,
DownloadService.class));
}
}
}
}
package com.download;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.RandomAccess;
import com.configue.Const;
import com.nico.DownLoadPage;
import com.nico.FileListView;
import android.app.Service;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.util.Log;
import android.widget.Toast;
public class DownloadService extends Service {
@Override
public void onDestroy() {
Const.isDownloading = false;
super.onDestroy();
}
private int percent;
String fileUrl;
int fileSize;
boolean isFinish;
String tempFile;
File localFile;
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onStart(Intent intent, int startId) {
Bundle bundle = intent.getExtras();
String path1 ="";
String url1 = "";
if (bundle != null) {
path1 = bundle.getString("path");
Const.path = path1;
url1 = bundle.getString("url");
Const.fileurl = url1;
}
fileUrl = Const.fileurl;
tempFile = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);
localFile = new File(Const.path + "/" + tempFile);
if (!localFile.exists()) {
if (Const.isDownloading) {
try {
localFile.createNewFile();
Const.downloadsize = 0;
new MyDownLoadThread().start();
} catch (IOException e) {
e.printStackTrace();
}
}
} else {
Const.downloadsize = (int) localFile.length();
int tempSize = getFileRealSize(fileUrl);
if (Const.isDownloading) {
if (Const.downloadsize != tempSize) {
new MyDownLoadThread().start();
}
}
}
}
@Override
public boolean onUnbind(Intent intent) {
return super.onUnbind(intent);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
public long remoteFile() {
return Const.downloadsize;
}
public class MyDownLoadThread extends Thread {
byte[] perSize = new byte[512];
FileOutputStream fos = null;
InputStream is = null;
HttpURLConnection conn = null;
public MyDownLoadThread() {
}
@Override
public void run() {
RandomAccessFile randomAccessFile = null;
try {
URL u = new URL(fileUrl);
try {
conn = (HttpURLConnection) u.openConnection();
conn.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)");
String sProperty = "bytes=" + Const.downloadsize + "-";
conn.setRequestProperty("RANGE", sProperty);
randomAccessFile = new RandomAccessFile(localFile, "rwd");
randomAccessFile.seek(Const.downloadsize);
fileSize = conn.getContentLength();
conn.connect();
is = conn.getInputStream();
int realsize = getFileRealSize(fileUrl);
int readSize = 0;
int length = 0;
int read = 0;
while (Const.isDownloading
&& (read = is.read(perSize, 0, 512)) != -1) {
length = read;
readSize += read;
randomAccessFile.write(perSize, 0, length);
percent = (int) ((localFile.length()+length) * 100 / realsize);
Const.downloadsize += length;
Intent intent = new Intent();
intent.setAction("com.nico.downloadpage");
if (Const.downloadsize == realsize) {
isFinish = true;
Const.isDownloading = false;
percent = 100;
intent.putExtra("percent", percent);
DownloadService.this.sendBroadcast(intent);
break;
}
intent.putExtra("percent", percent);
for (int i = 0; i < 10000; i++) {
if (i == 9999) {
DownloadService.this.sendBroadcast(intent);
}
}
}
} catch (IOException e) {
Const.isDownloading = false;
e.printStackTrace();
}
} catch (MalformedURLException e) {
Const.isDownloading = false;
e.printStackTrace();
} finally {
if (randomAccessFile != null) {
try {
randomAccessFile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (conn != null) {
conn.disconnect();
}
}
}
}
public int getFileRealSize(String url)
{
URL u = null;
try {
u = new URL(url);
} catch (MalformedURLException e) {
e.printStackTrace();
}
HttpURLConnection connn = null;
try {
connn = (HttpURLConnection) u.openConnection();
} catch (IOException e) {
e.printStackTrace();
}
int tempSize = connn.getContentLength();
return tempSize;
}
}
package com.nico;
import java.util.List;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.configue.Const;
import com.enetity.FileBean;
import com.util.HttpConn;
public class FileListView extends Activity {
private List<FileBean> list = null;
private String url = Const.url+"file.xml";
private ListView listview = null;
private ProgressDialog pd = null;
private String path;
private ProgressBar pb = null;
private Handler handler = new Handler() {
@Override
public void dispatchMessage(Message msg) {
super.dispatchMessage(msg);
switch (msg.what) {
case 1:
list = new HttpConn().getData(url);
break;
case 2:
Intent intent = new Intent(FileListView.this,
DownLoadPage.class);
startActivity(intent);
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
pd = new ProgressDialog(this);
pd.setTitle(" ");
pd.setMessage(" ");
listview = (ListView) findViewById(R.id.listview);
new getListAsynTask().execute();
path = Environment.getExternalStorageDirectory().getAbsolutePath();
}
@Override
protected void onResume() {
super.onResume();
}
public class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView img = null;
TextView txt = null;
Button btn = null;
if (convertView == null) {
convertView = FileListView.this.getLayoutInflater().inflate(
R.layout.item, null);
}
img = (ImageView) convertView.findViewById(R.id.fileimg);
txt = (TextView) convertView.findViewById(R.id.filename);
btn = (Button) convertView.findViewById(R.id.downbtn);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(Const.isNotLoad(Environment
.getExternalStorageDirectory().getAbsolutePath(), Const.url+"test.rar"))
{
// Intent intent = new Intent(FileListView.this,
// DownLoadPage.class);
// startActivity(intent);
handler.sendEmptyMessage(2);
}
else
{
Toast.makeText(FileListView.this, " ", 5000).show();
}
}
});
return convertView;
}
}
public class getListAsynTask extends
AsyncTask<String, String, List<FileBean>> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pd.show();
}
@Override
protected void onPostExecute(List<FileBean> result) {
super.onPostExecute(result);
listview.setAdapter(new MyAdapter());
pd.dismiss();
}
@Override
protected List<FileBean> doInBackground(String... params) {
list = new HttpConn().getData(url);
return list;
}
}
}