您的位置:首页 > 其它

ReadingNotes@02-12-2013

2013-05-03 09:11 274 查看

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

ReadingNotes@02-12-2013



pre {
background-color: #2f4f4f;line-height: 1.6;
FONT: 10.5pt Consola,"Bitstream Vera Sans", Courier New, helvetica;
color:wheat;
}
.h3 {
margin-left: 10pt;
}



ReadingNotes@02-12-2013

Android实战经验之图像处理及特效处理的集锦(总结版)

总结的很不错!

Cheatsheet: 2013 04.17 ~ 04.30

一直都比较喜欢CheatSheet形式的reference,简单明了。

这个不错Android cheatsheet for graphic designers

C++ Macro

http://stackoverflow.com/questions/216875/in-macros

One thing to be aware of when you're using the token-paste ('##') or stringizing
('#') preprocessing operators is that you have to use an extra level of
indirection for them to work properly in all cases

Android开发环境搭建

实现类似android市场多apk同时下载,更新通知栏信息小结

public class UpdateService extends Service {
private NotificationManager nm;
private Notification notification;
private boolean cancelUpdate = false;
private MyHandler myHandler;
private static ExecutorService executorService = Executors.newFixedThreadPool(5); // 固定五个线程来执行任务
@Override
public IBinder onBind(Intent intent) {
return null;
}

@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
/*同一个服务,为避免通知栏起冲突,特使用应用的id作为通知栏id,并用application中的一个Map记录id和下载进度,
并通过handler操作*/
int notificationId = intent.getIntExtra("id", new Random().nextInt());
if(Constants.download.containsKey(notificationId))
return 0;
notification = new Notification();
notification.icon = android.R.drawable.stat_sys_download;
// notification.icon=android.R.drawable.stat_sys_download_done;
notification.tickerText = intent.getStringExtra("name")+"开始下载";
notification.when = System.currentTimeMillis();
notification.defaults = Notification.DEFAULT_LIGHTS;
//显示在“正在进行中”
notification.flags = Notification.FLAG_NO_CLEAR | Notification.FLAG_ONGOING_EVENT;
PendingIntent contentIntent = PendingIntent.getActivity(this, notificationId,new Intent(this, IndexActivity.class), 0);
notification.setLatestEventInfo(this, intent.getStringExtra("name"), "0%", contentIntent);
Constants.download.put(notificationId, 0);
// 将下载任务添加到任务栏中
nm.notify(notificationId, notification);
myHandler = new MyHandler(Looper.myLooper(), UpdateService.this);
//myHandler = new MyHandler(Looper.myLooper(), this);

// 初始化下载任务内容views
//Message message = myHandler.obtainMessage(3, 0);
//myHandler.sendMessage(message);

// 启动线程开始执行下载任务
downFile(intent.getStringExtra("url"),notificationId,intent.getStringExtra("name"));
return super.onStartCommand(intent, flags, startId);
}

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

// 下载更新文件
private void downFile(final String url,final int notificationId,final String name) {
executorService.execute(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
File tempFile = null;
try {
HttpClient client = new DefaultHttpClient();
// params[0]代表连接的url
HttpGet get = new HttpGet(url);
HttpResponse response = client.execute(get);
HttpEntity entity = response.getEntity();
long length = entity.getContentLength();
InputStream is = entity.getContent();
if (is != null) {
File rootFile = new File(Environment.getExternalStorageDirectory(),"/zhtrade");
if (!rootFile.exists() && !rootFile.isDirectory())
rootFile.mkdir();

/*
* 路径的特殊性,分解出包名,并用对应的应用"_"+id特别标识,避免出现apk包重复和冲突(有一些apk的package是相同的)
*/
tempFile = new File(Environment.getExternalStorageDirectory(),"/zhtrade/"+ url.substring(url.lastIndexOf("/"),url.indexOf("?"))+"_"+notificationId+".apk");
if (tempFile.exists())
tempFile.delete();
tempFile.createNewFile();

// 已读出流作为参数创建一个带有缓冲的输出流
BufferedInputStream bis = new BufferedInputStream(is);

// 创建一个新的写入流,讲读取到的图像数据写入到文件中
FileOutputStream fos = new FileOutputStream(tempFile);
// 已写入流作为参数创建一个带有缓冲的写入流
BufferedOutputStream bos = new BufferedOutputStream(fos);

int read;
long count = 0;
int precent = 0;
byte[] buffer = new byte[1024];
while ((read = bis.read(buffer)) != -1 && !cancelUpdate) {
bos.write(buffer, 0, read);
count += read;
precent = (int) (((double) count / length) * 100);

// 每下载完成10%就通知任务栏进行修改下载进度
if (precent - Constants.download.get(notificationId) >= 10) {
Constants.download.put(notificationId, precent);
Message message = myHandler.obtainMessage(3,precent);
Bundle bundle = new Bundle();
bundle.putString("name", name);
message.setData(bundle);
message.arg1 = notificationId;
myHandler.sendMessage(message);
}
}
bos.flush();
bos.close();
fos.flush();
fos.close();
is.close();
bis.close();
}

if (!cancelUpdate) {
Message message = myHandler.obtainMessage(2, tempFile);
message.arg1 = notificationId;
Bundle bundle = new Bundle();
bundle.putString("name", name);
message.setData(bundle);
myHandler.sendMessage(message);
} else {
tempFile.delete();
}
} catch (ClientProtocolException e) {
if (tempFile.exists())
tempFile.delete();
Message message = myHandler.obtainMessage(4, name+"下载失败:网络异常!");
message.arg1 = notificationId;
myHandler.sendMessage(message);
} catch (IOException e) {
if (tempFile.exists())
tempFile.delete();
Message message = myHandler.obtainMessage(4, name+"下载失败:文件存储异常");
message.arg1 = notificationId;
myHandler.sendMessage(message);
} catch (Exception e) {
if (tempFile.exists())
tempFile.delete();
Message message = myHandler.obtainMessage(4, name+"下载失败,"+e.getMessage());
message.arg1 = notificationId;
myHandler.sendMessage(message);
}
}
});
}

// 安装下载后的apk文件
private void Instanll(File file, Context context) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");
context.startActivity(intent);
}

/* 事件处理类 */
class MyHandler extends Handler {
private Context context;

public MyHandler(Looper looper, Context c) {
super(looper);
this.context = c;
}

@Override
public void handleMessage(Message msg) {
PendingIntent contentIntent = null;
super.handleMessage(msg);
if (msg != null) {
switch (msg.what) {
case 0:
Toast.makeText(context, msg.obj.toString(),Toast.LENGTH_SHORT).show();
Constants.download.remove(msg.arg1);
break;
case 1:
break;
case 2:
contentIntent = PendingIntent.getActivity(UpdateService.this, msg.arg1,new Intent(UpdateService.this, IndexActivity.class), 0);
notification.setLatestEventInfo(UpdateService.this, msg.getData().getString("name")+"下载完成",   "100%",contentIntent);
nm.notify(msg.arg1, notification);
// 下载完成后清除所有下载信息,执行安装提示
Constants.download.remove(msg.arg1);
nm.cancel(msg.arg1);
Instanll((File) msg.obj, context);
// 停止掉当前的服务
stopSelf();
break;
case 3:
contentIntent = PendingIntent.getActivity(UpdateService.this, msg.arg1,new Intent(UpdateService.this, IndexActivity.class), 0);
notification.setLatestEventInfo(UpdateService.this, msg.getData().getString("name")+"正在下载",  Constants.download.get(msg.arg1) + "%",contentIntent);
nm.notify(msg.arg1, notification);
break;
case 4:
Toast.makeText(context, msg.obj.toString(),Toast.LENGTH_SHORT).show();
Constants.download.remove(msg.arg1);
nm.cancel(msg.arg1);
stopSelf();
break;
}
}
}
}

}


adb failed to start daemon 的解决办法

adb nodaemon server


Post by: Jalen Wang (转载请注明出处)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: