android manifest

16
Giới thiệu về Android Manifest Chào các bạn!!! Hôm nay, mình xin tiếp tục viết bài Android cơ bản: [Bài 2] Giới thiệu về Android Manifest. Ở bài trước mình cũng đã nhắc sơ qua về file AndroidManifest này. File Manifest rất quan trọng trong lập trình, khi build chương trình thì file AndroidManifest.xml là file chạy đầu tiên, nếu file này bị lỗi thì xem như chương trình của bạn không chạy được hoặc khai báo thiếu màn hình giao diện cũng như không thể nào chạy lên được,…. Bây giờ mình sẽ giải thích rõ hơn về file này: 1. File AndroidManifest.xml nằm dưới thư mục res, các bạn click vào mở file này lên và chọn vào AndroidManifest.xml để xem code, và đây là là Mã: 1 2 3 4 5 6 7 8 9 10 11 12 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.tqky.demo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" /> <uses-permission android:name="android.permission.BLUETOOTH"/> <application

Upload: khieuvutrongdemmua9x

Post on 22-Dec-2015

2 views

Category:

Documents


1 download

DESCRIPTION

giới thiệu về android manifest

TRANSCRIPT

Page 1: Android Manifest

Giới thiệu về Android Manifest     Chào các bạn!!! Hôm nay, mình xin tiếp tục viết bài Android cơ bản: [Bài 2]  Giới thiệu về Android Manifest. Ở bài trước mình cũng đã nhắc sơ qua về file AndroidManifest này. File Manifest rất quan trọng trong lập trình, khi build chương trình thì file AndroidManifest.xml là file chạy đầu tiên, nếu file này bị lỗi thì xem như chương trình của bạn không chạy được hoặc khai báo thiếu màn hình giao diện cũng như không thể nào chạy lên được,…. Bây giờ mình sẽ giải thích rõ hơn về file này:1. File AndroidManifest.xml nằm dưới thư mục res,

các bạn click vào mở file này lên và chọn vào AndroidManifest.xml để xem code, và đây là là Mã:

123456789101112131415161

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.tqky.demo"    android:versionCode="1"    android:versionName="1.0" >     <uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="19" />    <uses-permission android:name="android.permission.BLUETOOTH"/>     <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name="com.tqky.demo.MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                 <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>

Page 2: Android Manifest

71819202122232425262728

        </activity>    </application> </manifest>

2. Mục đích của file AndroidManifest.xml này là dùng để:- Đặt tên cho package của ứng dụng, cụ thể package ở đây là dùng để đóng gói mã nguồn java và phân biệt được các chương trình ứng dụng hoặc game khác trên App Store,…

- Mô tả các thành phần của ứng dụng như: activity, service, broadcast receiver hoặc content provider. Mình sẽ giới thiệu các từ ở

Page 3: Android Manifest

trên, đầu tiên là activity: mà hình giao diện là nơi để giao tiếp với người dùng, thứ 2 là service: dùng để thực thi các tác vụ cần nhiều thời gian, thực hiện ở chế độ ngầm, không cần nhiều thời gian, có thể hoạt động xuyên suốt ngay cả khi chương trình không hoạt động. thứ 3 là broadcast receiver: cho phép truyền tải các thông báo trên toàn hệ thống, không có giao diện nhưng có thể thực hiện thông qua thanh trạng thái. Thứ 4 là content provider: xây dựng cách thức truy xuất tập hợp các dữ liệu ứng dụng, xây dựng các ứng dụng sử dụng chung hoặc riêng nguồn tài nguyên. Đây là những phần lý thuyết rất căn bản và có ích mình khuyên các bạn nên note lại các thành phần ứng dụng mình nêu trên. Chúng ta sẽ gặp lại nó rất nhiều.- Thông báo những permission mà các ứng dụng khác cần có thể tương tác với ứng dụng hiện thời. Ví dụ dưới đây là muốn dùng Bluetooth của điện thoại thì phải khai báo nó vào:

1 <uses-permission android:name="android.permission.BLUETOOTH"/>

- Thông báo level thấp nhất của Android API mà ứng dụng cần để chạy. 

Page 4: Android Manifest

123

<uses-sdk        android:minSdkVersion="8"        android:targetSdkVersion="19" />

- Đây là giao diện của màn hình khi chạy lên:

123456789

        <activity            android:name="com.tqky.demo.MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                 <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>

 Trong đây có thẻ intent-filter là bộ lọc dùng để giới hạn các intent được sử dụng trong activity, còn thẻ category trong intent-filer là để cho biết khi chương trình chạy thì activity này là chạy đầu tiên, Vậy làm sao nó biết activity nào chạy trong source của mình? Dòng thứ 2 là dòng trỏ đến cái file java main của mình, ở file này mình sẽ thiết kế giao diện hoặc gọi 1 giao diện đã thiết kế sẵn bằng xml rồi sau đó viết code xử lý theo ý, sử dụng các giao diện đã có. 

Đây là những gì mình muốn nói về AndroidManifest.

Page 5: Android Manifest

[BÀI 1] HƯỚNG DẪN SỬ DỤNG SQL TRÊN ANDROID 

Chào các bạn!!!Hôm nay, mình xin Hướng Dẫn Sử Dụng SQL Trên Android , ở bài 1 này mình chỉ các bạn cách viết code trên eclipce. Nó cũng không khó lắm, chỉ cần các bạn học thuộc thì có thể sử dụng nó cho sau này rồi, SQL rất quan trọng các bạn nên tìm hiểu nó, rất nhiều ứng dụng cần đến SQL để quản lý dễ hơn. Quả thật nếu thiếu SQL thì việc quản lý dữ liệu trở nên khó khăn và không có hệ thống dẫn đến nếu nhiều quá thì khó khăn trong việc tìm kiếm và truy xuất thông tin. Bây giờ chúng ta cùng nhau tìm hiểu nó.1. Các bạn tạo 1 file java(hay nó cách khác là class) đặt tên “DBAdapter”. Các bạn có thể đặt tên tùy ý.2. khai báo các biến:         + khai báo tên các cột(hay còn gọi là thuộc tính):

123

public static final String stSoTT = "_id";//số thứ tựpublic static final String stTen = "name";//tênpublic static final String stEmail = "email";//địa chỉ email

          + khai báo biến tên lớp: 

1 private static final String stClass = "DBAdapter";

          + khai báo biến tên cơ sở dữ liệu, tên bảng cần tạo và phiên bản:

123

private static final String stCSDL = "MyDB";private static final String stBang = "contacts";private static final int iPhienBan = 1;

Page 6: Android Manifest

          + khai báo 1 biến có giá trị là câu lệnh tạo cơ sở dữ liệu:

1private static final String DATABASE_CREATE = "create table contacts (_id integer primary key autoncrement, "+ "name text not null, email text not null);";

          + khai báo 1 biến context (Context thuộc android.content (android.content.Context). Context giúp chúng ta dễ dàng truy cập và tương tác tới các tài nguyên của hệ thống, các thông tin, các dịch vụ (services), các thông số cấu hình, database, wallpaper, danh bạ, cuộc gọi, kết nối, chế độ rung (vibrator). Sở dĩ hầu hết các lớp có liên quan tới UI (layout, button, textview, imageview, listview,…) đều pải super tới Context vì bản thân nó đảm nhiệm việc truy cập resource (R.id, R.layout,….). Nếu chúng ta không tham chiếu tới Context class thì đương nhiên không thể dùng tới các resources mà chúng ta đã tạo ra.) như sau:

1 private final Context context;

          + khai báo 2 biến có kiểu dữ liệu là : DatabaseHelper và SQLiteDatabase (Đối tượng SQLiteDatabase thể hiện một CSDL và có các phương thức giao tác với CSDL như thêm, xóa, s ửa và truy vấn dữ liệu. Để tạo CSDL, gọi hàm SQLiteDatabase.create() và cũng có thể dùng lớp SQLiteOpenHelper.) như sau:

12

private static DatabaseHelper DBHelper;private static SQLiteDatabase db;

 3. Viết hàm khởi tạo 1 tham số:

Page 7: Android Manifest

12345

public DBAdapter(Context ctx){

this.context = ctx;DBHelper = new DatabaseHelper(context);

}

 4. Viết code tạo 1 class kế thừa SQLiteOpenHelper nó sẽ implement cho mình 3 phương thức bắt buộc đó là contructor với 4 param (mình có thể tùy chỉnh), onCreate(), onUpgrade() trong class đang viết:

123456789101112131415161718192021222324252

private class DatabaseHelper extends SQLiteOpenHelper{

DatabaseHelper(Context context) // hàm khởi tạo{

super(context, stCSDL, null, iPhienBan);}

 @Overridepublic void onCreate(SQLiteDatabase db) {

try{

db.execSQL(DATABASE_CREATE);//tạo 1 cơ sở dữ liệu có 1 bảng contacts}catch(SQLException e){

e.printStackTrace();}

@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

Log.w(stClass, "Upgrading database from version "+ oldVersion + " to " + newVersion + ", which will destroy all old data");

db.execSQL("DROP TABLE IF EXISTS contacts");onCreate(db);

}}

Page 8: Android Manifest

6272829

 5. Viết phương thức kết nối cơ sở dữ liệu thông qua SQLException và đóng cơ sở dữ liệu:

12345678910

public DBAdapter open() throws SQLException{

db = DBHelper.getReadableDatabase();return this;

} public void close() {

DBHelper.close();}

 6. Viết hàm thêm dữ liệu vào bảng, ở đây có 2 tham số là tên và email, còn tham số số thứ tự thì tự động tăng rồi nên không cần thêm vào hàm:

1234567

public long insertContact(String name, String email) {

ContentValues iv = new ContentValues();iv.put(stTen, name);iv.put(stEmail, email);return db.insert(stBang, null, iv);

}

 7. Viết hàm xóa dữ liệu của bảng(chỉ cần truyền vào tham số là số thứ tự là nó sẽ tự động tìm đến đúng số thứ tự đó và xóa email và tên tương ứng với nó):

1 public boolean deleteContact(long lCotID)

Page 9: Android Manifest

234

{return db.delete(stBang, stSoTT + "=" + lCotID, null) > 0;

}

 8. Viết hàm sửa dữ liệu: 

1234567

public boolean updateContact(long rowId, String name, String email){

ContentValues args = new ContentValues();args.put(stTen, name);args.put(stTen, email);return db.update(stBang, args, stSoTT + "=" + rowId, null) > 0;

}

 9.  Và cuối cùng là hàm lấy tất cả dữ liệu ra và xuất ra: (Ta dùng Cursor để lưu trữ giá trị trả về của hàm dưới đây: public Cursor query (String table, String[] columns, String selection, String[] selectionArgs,String groupBy, String having, String orderBy)) :

1234

public Cursor getAllContacts(){

return db.query(stBang, new String[] {stSoTT ,  stTen, stEmail }, null, null, null, null, null);}

 10. Qua file java chính(file chạy) vào hàm onCreate viết :         + Đưa dữ liệu vào:

12345

DBAdapter db = new DBAdapter(this);db.open();long id = db.insertContact("tran thi teo", "[email protected]");id = db.insertContact("tran thi tum", "[email protected]");db.close();

         + Lấy dữ liệu ra:

Page 10: Android Manifest

123456789101112

db.open();Cursor c = db.getAllContacts();if (c.moveToFirst()){

do{

Toast.makeText(this, "id: " + c.getString(0) + "\n" +"Name: " + c.getString(1) + "\n" +"Email: " + c.getString(2), Toast.LENGTH_LONG).show();

}while(c.moveToNext());}

db.close();

 Vậy là đã xong, các bạn hãy làm nhiều lần cho nhớ.Kết quả sau khi chạy chương trình là:

Bài viết về VIEWFLIPPER bằng trượt ngón tay

Page 11: Android Manifest

 

Chào các bạn!!!Tiếp tục mình xin hướng dẫn 1 bài cơ bản về Android. Bài viết về VIEWFLIPPER bằng trượt ngón tay. 1 bài viết rất cơ bản và đơn giản nhưng rất hữu ích đối với các bạn. Giờ chúng ta hãy cùng nhau tìm hiểu về nó:1. Tạo project.2. Tạo 3 layout đặt tên: layout_first.xml, layout_second.xml, layout_third.xml.3. Trên 3 layout thiết kế giao diện tùy ý(chẳng hạn như mỗi layout kéo 1 hình ảnh khác nhau vào), còn layout Activity_main.xml ta kéo 1 ViewFlipper vào(ViewFlipper dùng để hiển thị các 3 layout còn lại chúng ta đã tạo trên).4. Trong thư mục “res” tạo thư mục con tên “anim”.5. Tạo file tên “go_next_in.xml” trong thư mục “anim” kiểu animation gốc là set và code như sau:

123456

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    android:interpolator = "@android:anim/decelerate_interpolator">    <translate android:fromXDelta="100%" android:toXDelta="0%"        android:duration="3000"/></set>

6. Tạo file tên “go_next_out.xml” trong thư mục “anim” kiểu animation gốc là set và code như sau:

Page 12: Android Manifest

123456

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    android:interpolator="@android:anim/decelerate_interpolator">    <translate android:fromXDelta="0%" android:toXDelta="-100%"        android:duration="3000"/></set>

7. Tạo file tên “go_prev_in.xml” trong thư mục “anim” kiểu animation gốc là set và code như sau:

123456

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    android:interpolator="@android:anim/decelerate_interpolator">    <translate android:fromXDelta="-100%" android:toXDelta="0%"        android:duration="3000"/></set>

 8. Tạo file tên “go_prev_out.xml” trong thư mục “anim” kiểu animation gốc là set và code như sau:

123456

<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"    android:interpolator="@android:anim/decelerate_interpolator">    <translate android:fromXDelta="0%" android:toXDelta="100%"        android:duration="3000"/></set>

 9. trong file java ta khởi tạo như sau:

12

ViewFlipper fv;float tuvitri, denvitri;

Page 13: Android Manifest

 10. trong hàm onCreate viết code như sau:

1234567891011

fv = (ViewFlipper) findViewById(R.id.viewFlipper1);

LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);int layouts[] = new int[]

{R.layout.layout_first,R.layout.layout_second,R.layout.layout_third

};for(int layout: layouts)

fv.addView(inflater.inflate(layout,null));

             LayoutInflater: một class dùng để convert control/widget từ xml sang instance để sử dụng trong code. Chiếc cầu nối giữa XML và source code của bạn. Tiếp theo ta tạo 1 mảng layouts chứa 3 layout đã thiết kế ở bước số 2. Cuối cùng chúng ta tạo ra vòng for để xuất các layout đó ra màn hình thông qua ViewFlipper11. Override hàm ontouch rồi viết code như sau:

123456789101112

@Overridepublic boolean onTouchEvent(MotionEvent event) {

switch (event.getAction()){case MotionEvent.ACTION_DOWN:

tuvitri = event.getX();break;

case MotionEvent.ACTION_UP:denvitri = event.getX();if(tuvitri > denvitri){

fv.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.go_next_in));fv.setOutAnimation(AnimationUtils.loadAnimation(this,

R.anim.go_next_out));

Page 14: Android Manifest

131415161718192021222324252627

fv.showNext();}else if(tuvitri < denvitri){

fv.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.go_prev_in));fv.setOutAnimation(AnimationUtils.loadAnimation(this,

R.anim.go_prev_out));fv.showPrevious();

}default:

break;}return super.onTouchEvent(event);

}

      trong hàm onTouchEvent tạo switch-case dùng để bắt các sự kiện khi chạm vào màn hình đến lúc khi không chạm vào nữa rồi lấy 2 tọa độ so sánh nếu tọa độ ban đầu lớn hơn tọa độ lúc sau thì cho layout di chuyển từ trái sang phải và ngược lại. Nếu tọa độ ban đầu lớn hơn tọa độ lúc sau thì bắt đầu gọi các file layout mà ta đã viết code ở trên(các code này chủ yếu sử lý cho các layout giao diện di chuyển như thế nào). Vậy là xong rồi đó.