RSS Feed

Posts Tagged ‘android’

  1. mp3 cover fetcher

    五月 13, 2010 by bborn

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

    main
    2
    3

    就是这样


  2. HERO是个好手机

    十二月 6, 2009 by bborn

    总体来说 还是比较满意的
    说点缺点,
    电池撑不到两天,还是电话比较少的情况
    有些时候程序也会无法响应
    看来定时重启也是必要的

    昨晚边听歌边上网 感觉还是蛮不错的
    “七月份的尾巴 你是狮子座
    八月份的前奏 你是狮子座 “


  3. 强大的Google

    八月 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的强大


  4. 改进版的Google 翻译前端

    七月 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;
    		}
    	}