mp3 cover fetcher 是android手机上的一个软件
它可以通过读取mp3的tag信息,查询到mp3所属专辑唱片的封面
并且下载下来,写入到mp3文件里
这样 在你的听音乐的时候 播放器里不会再是一片空白
软件很简单 而且它是免费的!
在android market里搜索”mp3 cover fetcher”
更方便的扫描这个qr code




就是这样
五月 13, 2010 by bborn
mp3 cover fetcher 是android手机上的一个软件
它可以通过读取mp3的tag信息,查询到mp3所属专辑唱片的封面
并且下载下来,写入到mp3文件里
这样 在你的听音乐的时候 播放器里不会再是一片空白
软件很简单 而且它是免费的!
在android market里搜索”mp3 cover fetcher”
更方便的扫描这个qr code




就是这样
Category code | Tags: android,droidisland,mp3 cover fetcher | No Comments
十二月 6, 2009 by bborn
总体来说 还是比较满意的
说点缺点,
电池撑不到两天,还是电话比较少的情况
有些时候程序也会无法响应
看来定时重启也是必要的
昨晚边听歌边上网 感觉还是蛮不错的
“七月份的尾巴 你是狮子座
八月份的前奏 你是狮子座 “
Category diary | Tags: android,hero,手机 | No Comments
八月 22, 2009 by bborn
越来越离不开google的服务
每天晚上一般来说有两个小时是在google reader上度过的
除此之外 我常用的google服务还有
gmail,picasa,doc,calendar,group
喜欢的还有youtube和他的看家本领search
它的强大不止是给我们免费好用的服务
而且还把这些看似独立的服务mash up
今天注册了google voice
米国的电信实在太强大
短信全球免费发
米国和加拿大的电话免费call
靓号也是随便挑 要是在天朝…
还不知道怎样翻着花样赚钱
据说google voice可以将对话转成文本
以便搜索 震撼
在今年年初 google发布了Google Sync
可以将手机的联系人同步到gmail的联系人当中
去看了看 我的老手机没有支持的软件下载
不过这同步是基于SyncML协议
在我的老nokia上设置了一下
很快就同步上去了
包括备注和大头照…
标准的力量太恐怖
最近很喜欢 htc hero 俗称G3
是基于Google Android1.5 系统的手机
今天难得休息去村里逛了逛
共发现有两人在关注G1准备入手
另见一大姐在用G1
等G3降价到心理价位 一定要入手 >.<
再次感叹一下google的强大
Category diary | Tags: android,google | No Comments
七月 6, 2009 by bborn
其实一直对android很感兴趣
虽然没有用过它的真机…
上个星期看到了这篇文章
Android:Google 翻译前端
作者的代码写的简单明了
并且发布了源代码给大家学习
真是很不错
看了之后 决定动手增加点东西 学习一下android的开发
增加的内容主要是在查询过程中弹出一个等待的对话框
涉及到的内容包括 ProgressDialog, AsyncTask
效果如下
当用户点击Translate的时候,会出现一个”正在查询”的对话框
查询完毕后对话框消失
对话框很好做 showDialog(1) 后
系统会调用
@Override
protected Dialog onCreateDialog(int id) {
if(1 == id)
{
ProgressDialog dialog = new ProgressDialog(GTranslator.this);
dialog.setTitle(“正在查询”);
dialog.setMessage(“请稍候……”);
return dialog;
}
return null;
}
但是 查询是个阻塞的过程
我们必须得在另外一个线程里去做这个事情
比较简单的方法就是继承AsyncTask
网上有一篇转载比较多的关于AsyncTask的文章(Android线程模型(Painless Threading))
官方的说明在这里 http://developer.android.com/reference/android/os/AsyncTask.html
大概说一下 android 的ui线程不是线程安全的
我们不能在其他的线程里直接做关于ui的操作
这里有个简单的办法就是继承AsyncTask
然后实现它的doInBackground方法
在类的onPreExecute(),publishProgress(Progress…),onPostExecute(Result)方法里
做ui的操作
如果在doInBackground里操作ui
可能会弹出异常提示
“Only the original thread that created a view hierarchy can touch its views”
不是每次都弹…为什么了?
下面贴一下线程的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | private class ProcessDialogThread extends AsyncTask<String, Void, String> { // @Override protected String doInBackground(String... str) { String toTranslateTextString = toTranslateEditText.getText() .toString(); String tempString = toTranslateTextString.replace(" ", "%20"); fromString = mCountries[fromSpinner.getSelectedItemPosition()]; toString = mCountries[toSpinner.getSelectedItemPosition()]; String queryString = tempString + "&langpair=" + fromString + "%7C" + toString; return getRawData(queryString); } protected void onPreExecute() { showDialog(1); translatedTextView.setText("Connecting..."); } protected void onPostExecute(String rawData) { dismissDialog(1); if (null != rawData) { String parsedDataString = getData(rawData); if (null == parsedDataString || "" == parsedDataString) { try { translatedTextView.setText("Not found"); } catch (Exception e) { e.printStackTrace(); } } else { translatedTextView.setText(parsedDataString); dbAdapter.insertItem(toTranslateEditText.getText() .toString(), parsedDataString); /* * FileAccess.writeFile(this, * toTranslateEditText.getText().toString() + ":" + * parsedDataString); */ } } else { translatedTextView.setText("Translate failed!"); } } public String getRawData(String string) { String dataString = null; // String queryString = "hello%20world&langpair=en%7Czh-CN"; String queryString = string; try { URL url; if (bAtOffice) { url = new URL("http://10.85.40.153:8000/a.xml"); } else { url = new URL( "http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=" + queryString); } URLConnection conn = url.openConnection(); conn.connect(); BufferedReader reader = new BufferedReader( new InputStreamReader(conn.getInputStream())); byte buffer[] = new byte[1024]; // bis.r String readerString; while ((readerString = reader.readLine()) != null) { dataString += readerString; } reader.close(); // is.close(); } catch (IOException e) { System.out.print("Net work error"); } return dataString; } } |
Category code | Tags: android,代码 | 4 Comments