Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 11 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
11
Dung lượng
311 KB
Nội dung
Trung tâm Tin học – ĐH KHTN PHẦN MỀM TỪ ĐIỂN Bây giờ chắc các bạn không còn xa lạ với việc sử dụng từ điển trên điện thoại di động. Các phần mềm từ điển trên điện thoại di động đã nhanh chóng được người dùng chú ý và sử dụng vì sự tiện lợi của nó so với kim từ điển hay từ điển giấy. Và sau đây mình sẽ dựa vào thư viện của Apache để xây dựng từ điển trên Android cho 6 ngôn ngữ phổ biến nhất (Anh,Pháp,Đức,Trung,Nhật,Tây Ban Nha ). Bộ thư viện này không có hỗ trợ tiếng Việt nên cũng hơi đáng tiếc. Nhưng bạn có thể hoàn toàn tìm và thay thế bằng bộ thư viện có chứa Tiếng Việt để sữ dụng trên chính điện thoại của mình. Và các bạn làm như sau: 1/ Tạo 1 Project : Project name: TranslateDemo Build Target: Android 2.3.3 Application name: TranslateDemo Package name: com.dac.translation Create Activity: MainActivity 2/ Tạo các tài nguyên hỗ trợ ứng dụng, bắt đầu với file strings.xml: <?xml version="1.0" encoding="utf-8"?> <! This file is /res/values/strings.xml > <resources> <string name="translateBtn">> Translate ></string> <string name="input">Enter the text to translate</string> <string name="translation">The translation will appear here</string> <string name="prompt">Choose a language</string> </resources> Tiếp theo tạo thêm 1 file arrays.xml cũng trong folder values/: <?xml version="1.0" encoding="utf-8"?> <! This file is /res/values/arrays.xml > <resources> <string-array name="languages"> <item>Chinese</item> <item>English</item> <item>French</item> <item>German</item> <item>Japanese</item> <item>Spanish</item> </string-array> <string-array name="language_values"> Lập trình Android – http://laptrinhdidong.vn Page 1 Trung tâm Tin học – ĐH KHTN <item>zh</item> <item>en</item> <item>fr</item> <item>de</item> <item>ja</item> <item>es</item> </string-array> </resources> 3/ Các bạn thiết kế giao diện trong file main.xml: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_height="fill_parent" android:layout_width="fill_parent"> <EditText android:id="@+id/input" android:hint="@string/input" android:layout_height="wrap_content" android:layout_width="fill_parent" /> <Spinner android:id="@+id/from" android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/input" android:prompt="@string/prompt" /> <Button android:id="@+id/translateBtn" android:text="@string/translateBtn" android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/input" android:layout_toRightOf="@id/from" android:enabled="false" /> <Spinner android:id="@+id/to" android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/input" android:layout_toRightOf="@id/translateBtn" android:prompt="@string/prompt" /> <EditText android:id="@+id/translation" android:hint="@string/translation" android:layout_height="wrap_content" android:layout_width="fill_parent" android:editable="false" Lập trình Android – http://laptrinhdidong.vn Page 2 Trung tâm Tin học – ĐH KHTN android:layout_below="@id/from" /> <TextView android:id="@+id/poweredBy" android:text="powered by Google" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" /> </RelativeLayout> 4/ Khai báo trong file AndroidManifest.xml để hỗ trợ truy cap Internet và các services: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.androidbook.translation" android:versionName="1.0" android:versionCode="1" > <application android:label="Translate" android:icon="@drawable/icon"> <activity android:name="MainActivity" android:label="Translate" android:screenOrientation="sensor" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name="TranslateService" android:label="Translate"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </service> </application> <uses-sdk android:minSdkVersion="4" /> <uses-permission android:name="android.permission.INTERNET" /> </manifest> 5/ Tiếp theo là phần quan trọng nhất là tải về và sữ dụng thư viện của Apache, và sau này khi muốn dùng các thư viện bên ngoài các bạn cũng làm tương tự cách sau: + Truy cập trang web: http://commons.apache.org/lang/download_lang.cgi để down bộ Commons-lang (hiện tại thì mình đang tải bộ “commons-lang3-3.0.1-bin.zip”). Lập trình Android – http://laptrinhdidong.vn Page 3 Trung tâm Tin học – ĐH KHTN Khi down xong các bạn giải nén sẽ đc 1 folder chứa 2 file .JAR . Các bạn vào lại Eclipse bấm chuột phải vào Project chọn Build Path >> Configure Build Path . Khi cửa sổ Java Build Path mở ra các bạn chọn thẻ Libraries và chọn Add External Jars… kế tiếp các bạn chỉ việc chọn file JAR vừa giải nén(file ko có chữ Test ) và bấm Open sẽ được như sau: Khi đã add vào 1 thư viện thì các bạn chuyển qua thẻ Orderand Exprort để sử dụng thư viện: Lập trình Android – http://laptrinhdidong.vn Page 4 Trung tâm Tin học – ĐH KHTN Cuối cùng các bạn kiểm tra để chắc chắn rằng thư viện đã add vào Project: Khi đã thêm thư viện vào thì các bạn chuyển qua bước tiếp theo. 6/ Trogn Package chính các bạn tạo thêm 3 file: TranslateService.java, Translator.java. Itranslate.aidl Và có code lần lượt như sau: + Translator.java: package com.androidbook.translation; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import org.apache.commons.lang3.StringEscapeUtils; import org.json.JSONObject; import android.util.Log; Lập trình Android – http://laptrinhdidong.vn Page 5 Trung tâm Tin học – ĐH KHTN public class Translator { private static final String ENCODING = "UTF-8"; private static final String URL_BASE = "http://ajax.googleapis.com/ajax/services/language/translate? v=1.0&langpair="; private static final String INPUT_TEXT = "&q="; private static final String MY_SITE = "http://my.website.com"; private static final String TAG = "Translator"; public static String translate(String text, String from, String to) throws Exception { try { StringBuilder url = new StringBuilder(); url.append(URL_BASE).append(from).append("%7C").append(to); url.append(INPUT_TEXT).append(URLEncoder.encode(text, ENCODING)); HttpURLConnection conn = (HttpURLConnection) new URL(url.toString()).openConnection(); conn.setRequestProperty("REFERER", MY_SITE); conn.setDoInput(true); conn.setDoOutput(true); try { InputStream is= conn.getInputStream(); String rawResult = makeResult(is); JSONObject json = new JSONObject(rawResult); String result = ((JSONObject)json.get("responseData")).getString("translatedText"); return (StringEscapeUtils.unescapeXml(result)); } finally { conn.getInputStream().close(); if(conn.getErrorStream() != null) conn.getErrorStream().close(); } } catch (Exception ex) { throw ex; } } private static String makeResult(InputStream inputStream) throws Exception { StringBuilder outputString = new StringBuilder(); try { String string; if (inputStream != null) { BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, ENCODING)); while (null != (string = reader.readLine())) { outputString.append(string).append('\n'); } Lập trình Android – http://laptrinhdidong.vn Page 6 Trung tâm Tin học – ĐH KHTN } } catch (Exception ex) { Log.e(TAG, "Error reading translation stream.", ex); } return outputString.toString(); } } + TranslateService.java : package com.androidbook.translation; import android.app.Service; import android.content.Intent; import android.os.IBinder; import android.util.Log; public class TranslateService extends Service { public static final String TAG = "TranslateService"; private final ITranslate.Stub mBinder = new ITranslate.Stub() { public String translate(String text, String from, String to) { try { return Translator.translate(text, from, to); } catch (Exception e) { Log.e(TAG, "Failed to translate: " + e.getMessage()); return null; } } }; @Override public IBinder onBind(Intent intent) { return mBinder; } } + Itranslate.aidl : package com.androidbook.translation; interface ITranslate { String translate(in String text, in String from, in String to); } + MainActivity.java : package com.androidbook.translation; import android.app.Activity; import android.content.ComponentName; import android.content.Context; Lập trình Android – http://laptrinhdidong.vn Page 7 Trung tâm Tin học – ĐH KHTN import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.Spinner; import android.widget.TextView; public class MainActivity extends Activity implements OnClickListener { static final String TAG = "Translator"; private EditText inputText = null; private TextView outputText = null; private Spinner fromLang = null; private Spinner toLang = null; private Button translateBtn = null; private String[] langShortNames = null; private Handler mHandler = new Handler(); private ITranslate mTranslateService; private ServiceConnection mTranslateConn = new ServiceConnection() { public void onServiceConnected(ComponentName name, IBinder service) { mTranslateService = ITranslate.Stub.asInterface(service); if (mTranslateService != null) { translateBtn.setEnabled(true); } else { translateBtn.setEnabled(false); Log.e(TAG, "Unable to acquire TranslateService"); } } public void onServiceDisconnected(ComponentName name) { translateBtn.setEnabled(false); mTranslateService = null; } }; @Override protected void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); inputText = (EditText) findViewById(R.id.input); outputText = (EditText) findViewById(R.id.translation); fromLang = (Spinner) findViewById(R.id.from); toLang = (Spinner) findViewById(R.id.to); Lập trình Android – http://laptrinhdidong.vn Page 8 Trung tâm Tin học – ĐH KHTN langShortNames = getResources().getStringArray(R.array.language_values); translateBtn = (Button) findViewById(R.id.translateBtn); translateBtn.setOnClickListener(this); ArrayAdapter<?> fromAdapter = ArrayAdapter.createFromResource(this, R.array.languages, android.R.layout.simple_spinner_item); fromAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1lin e); fromLang.setAdapter(fromAdapter); fromLang.setSelection(1); // English ArrayAdapter<?> toAdapter = ArrayAdapter.createFromResource(this, R.array.languages,android.R.layout.simple_spinner_item); toAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line) ; toLang.setAdapter(toAdapter); toLang.setSelection(3); // German inputText.selectAll(); Intent intent = new Intent(Intent.ACTION_VIEW); bindService(intent, mTranslateConn, Context.BIND_AUTO_CREATE); } @Override protected void onDestroy() { super.onDestroy(); unbindService(mTranslateConn); } public void onClick(View v) { if (inputText.getText().length() > 0) { doTranslate(); } } private void doTranslate() { mHandler.post(new Runnable() { public void run() { String result = ""; try { int fromPosition = fromLang.getSelectedItemPosition(); int toPosition = toLang.getSelectedItemPosition(); String input = inputText.getText().toString(); if(input.length() > 5000) input = input.substring(0,5000); Lập trình Android – http://laptrinhdidong.vn Page 9 Trung tâm Tin học – ĐH KHTN Log.v(TAG,"Translating from " + langShortNames[fromPosition] + " to " + langShortNames[toPosition]); result = mTranslateService.translate(input, langShortNames[fromPosition], langShortNames[toPosition]); if (result == null) { throw new Exception("Failed to get a translation"); } outputText.setText(result); inputText.selectAll(); } catch (Exception e) { Log.e(TAG, "Error: " + e.getMessage()); } } }); } } Cuối cùng các bạn chỉ còn debug ứng dụng và nhận được nhu sau: - Ban đầu: Bấm vào chọn ngôn ngữ: Lập trình Android – http://laptrinhdidong.vn Page 10 [...]...Trung tâm Tin học – ĐH KHTN Và khi ta dịch: Mọi ý kiến đóng góp các bạn vui lòng gữi bài viết về forum trang web www.laptrinhdidong.vn Rất mong nhận được phản hồi từ các bạn Lập trình Android – http://laptrinhdidong.vn Page 11 . Trung tâm Tin học – ĐH KHTN PHẦN MỀM TỪ ĐIỂN Bây giờ chắc các bạn không còn xa lạ với việc sử dụng từ điển trên điện thoại di động. Các phần mềm từ điển trên điện thoại di động đã nhanh chóng. chú ý và sử dụng vì sự tiện lợi của nó so với kim từ điển hay từ điển giấy. Và sau đây mình sẽ dựa vào thư viện của Apache để xây dựng từ điển trên Android cho 6 ngôn ngữ phổ biến nhất (Anh,Pháp,Đức,Trung,Nhật,Tây. xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_height="fill_parent" android:layout_width="fill_parent"> <EditText android:id="@+id/input" android:hint="@string/input"