Thứ Năm, 21 tháng 6, 2018

Android - Hoạt động

Một hoạt động đại diện cho một màn hình với giao diện người dùng giống như cửa sổ hoặc khung của hoạt động Java.Android là lớp con của lớp ContextThemeWrapper.

Nếu bạn đã làm việc với ngôn ngữ lập trình android cùng với C, C ++ hoặc Java thì bạn phải thấy rằng chương trình của bạn bắt đầu từ hàm main () . Một cách rất tương tự, hệ thống Android khởi động chương trình của nó bằng một Hoạt động bắt đầu bằng một cuộc gọi trên phương thức gọi lại onCreate () . Có một chuỗi các phương thức gọi lại khởi động một hoạt động và một chuỗi các phương thức gọi lại để phá vỡ một hoạt động như được hiển thị trong sơ đồ vòng đời hoạt động bên dưới: ( image courtesy: android.com )

ảnh minh họa

Lớp Activity xác định các sự kiện gọi lại sau đây là các sự kiện. Bạn không cần phải thực hiện tất cả các phương thức callbacks. Tuy nhiên, điều quan trọng là bạn hiểu từng cái và triển khai những ứng dụng đảm bảo ứng dụng của bạn hoạt động theo cách người dùng mong đợi.

Sr.NoGọi lại & Mô tả
1onCreate ()

Đây là lần gọi lại đầu tiên và được gọi khi hoạt động được tạo lần đầu tiên.
2băt đâu()

Gọi lại này được gọi khi hoạt động hiển thị cho người dùng.
3onResume ()

Điều này được gọi khi người dùng bắt đầu tương tác với ứng dụng.
4onPause ()

Hoạt động bị tạm dừng không nhận được dữ liệu nhập của người dùng và không thể thực thi bất kỳ mã nào và được gọi khi hoạt động hiện tại bị tạm dừng và hoạt động trước đó đang được tiếp tục.
5dừng lại()

Gọi lại này được gọi khi hoạt động không còn hiển thị nữa.
6onDestroy ()

Gọi lại này được gọi trước khi hoạt động bị hệ thống phá hủy.
7onRestart ()

Gọi lại này được gọi khi hoạt động khởi động lại sau khi dừng lại.

Thí dụ

Ví dụ này sẽ đưa bạn qua các bước đơn giản để hiển thị vòng đời hoạt động ứng dụng Android. Làm theo các bước sau để sửa đổi ứng dụng Android mà chúng tôi đã tạo trong chương Hello World
 
Example

Bậc thangSự miêu tả
1Bạn sẽ sử dụng Android studio để tạo một ứng dụng Android và đặt tên nó là HelloWorld trong một gói com.example.helloworld như được giải thích trong chương Hello World Example .
2Sửa đổi tệp hoạt động chính MainActivity.java như được giải thích bên dưới. Giữ nguyên các tệp còn lại.
3Chạy ứng dụng để khởi chạy trình giả lập Android và xác minh kết quả của các thay đổi được thực hiện trong ứng dụng.
Sau đây là nội dung của tệp hoạt động chính đã sửa đổi src / com.example.helloworld / MainActivity.java . Tệp này bao gồm từng phương pháp vòng đời cơ bản. Phương thức Log.d () đã được sử dụng để tạo ra các thông điệp tường trình
package com.example.helloworld;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;

public class MainActivity extends Activity {
   String msg = "Android : ";
   
   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      Log.d(msg, "The onCreate() event");
   }

   /** Called when the activity is about to become visible. */
   @Override
   protected void onStart() {
      super.onStart();
      Log.d(msg, "The onStart() event");
   }

   /** Called when the activity has become visible. */
   @Override
   protected void onResume() {
      super.onResume();
      Log.d(msg, "The onResume() event");
   }

   /** Called when another activity is taking focus. */
   @Override
   protected void onPause() {
      super.onPause();
      Log.d(msg, "The onPause() event");
   }

   /** Called when the activity is no longer visible. */
   @Override
   protected void onStop() {
      super.onStop();
      Log.d(msg, "The onStop() event");
   }

   /** Called just before the activity is destroyed. */
   @Override
   public void onDestroy() {
      super.onDestroy();
      Log.d(msg, "The onDestroy() event");
   }
}
Một lớp hoạt động tải tất cả các thành phần giao diện người dùng bằng cách sử dụng tệp XML có sẵn trong thư mục res / layout của dự án. Câu lệnh sau tải các thành phần giao diện người dùng từ tệp res / layout / activity_main.xml :
setContentView(R.layout.activity_main);
Ứng dụng có thể có một hoặc nhiều hoạt động mà không có bất kỳ hạn chế nào. Mọi hoạt động bạn xác định cho ứng dụng của bạn phải được khai báo trong tệp Android Manifest.xml của bạn và hoạt động chính cho ứng dụng của bạn phải được khai báo trong tệp kê khai với <intent-filter> bao gồm hành động CHÍNH và danh mục LAUNCHER như sau:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.tutorialspoint7.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
Nếu hành động CHÍNH hoặc danh mục LAUNCHER không được khai báo cho một trong các hoạt động của bạn thì biểu tượng ứng dụng của bạn sẽ không xuất hiện trong danh sách ứng dụng của Màn hình chính.

Hãy thử chạy Hello World đã sửa đổi của chúng ta ! ứng dụng chúng tôi vừa sửa đổi. Tôi cho rằng bạn đã tạo AVD của mình trong khi thiết lập môi trường. Để chạy ứng dụng từ Android studio, hãy mở một trong các tệp hoạt động của dự án của bạn và nhấp vào biểu tượng Chạy từ thanh công cụ.

Android studio cài đặt ứng dụng trên AVD của bạn và bắt đầu nó và nếu mọi thứ đều ổn với thiết lập và ứng dụng của bạn, nó sẽ hiển thị cửa sổ Emulator và bạn sẽ thấy các thông điệp tường trình sau trong cửa sổ LogCat trong Android studio

08-23 10:32:07.682 4480-4480/com.example.helloworld D/Android :: The onCreate() event
08-23 10:32:07.683 4480-4480/com.example.helloworld D/Android :: The onStart() event
08-23 10:32:07.685 4480-4480/com.example.helloworld D/Android :: The onResume() event

NIIT-ICT
ảnh minh họa 

Chúng ta hãy thử bấm vào nút khóa màn hình trên trình giả lập Android và nó sẽ tạo ra các thông báo sự kiện sau trong cửa sổ LogCat trong studio android:


08-23 10:32:53.230 4480-4480/com.example.helloworld D/Android :: The onPause() event
08-23 10:32:53.294 4480-4480/com.example.helloworld D/Android :: The onStop() event

Hãy để chúng tôi một lần nữa cố gắng mở khóa màn hình của bạn trên trình giả lập Android và nó sẽ tạo ra các thông báo sự kiện sau trong cửa sổ LogCattrong Android studio:

08-23 10:34:41.390 4480-4480/com.example.helloworld D/Android :: The onStart() event
08-23 10:34:41.392 4480-4480/com.example.helloworld D/Android :: The onResume() event

Tiếp theo, chúng ta hãy thử nhấn nút Back trên trình giả lập Android và nó sẽ tạo ra các thông báo sự kiện sau trong cửa sổ LogCat trong Android studio và điều này hoàn thành Vòng đời hoạt động cho một ứng dụng Android.

08-23 10:37:24.806 4480-4480/com.example.helloworld D/Android :: The onPause() event
08-23 10:37:25.668 4480-4480/com.example.helloworld D/Android :: The onStop() event
08-23 10:37:25.669 4480-4480/com.example.helloworld D/Android :: The onDestroy() event

Thứ Tư, 20 tháng 6, 2018

Tài nguyên Android Tổ chức & Truy cập

Có nhiều mục khác mà bạn sử dụng để xây dựng một ứng dụng Android tốt. Ngoài việc viết mã cho ứng dụng, bạn cần phải học lập trình android và cách chăm sóc nhiều tài nguyên khác như nội dung tĩnh mà mã của bạn sử dụng, chẳng hạn như bitmap, màu sắc, định nghĩa bố cục, chuỗi giao diện người dùng, hướng dẫn hoạt ảnh và hơn thế nữa. Các tài nguyên này luôn được duy trì riêng biệt trong các thư mục con khác nhau trong thư mục res / của dự án.

NIIT-ICT
ảnh minh họa


Hướng dẫn này sẽ giải thích cho bạn cách bạn có thể tổ chức các tài nguyên ứng dụng của bạn, chỉ định các tài nguyên thay thế và truy cập chúng trong các ứng dụng của bạn.

Sắp xếp tài nguyên trong Android Studio

MyProject/
   app/
      manifest/
         AndroidManifest.xml
   java/
      MyActivity.java  
      res/
         drawable/  
            icon.png  
         layout/  
            activity_main.xml
            info.xml
         values/  
            strings.xml 
     
Sr.No.Loại thư mục và tài nguyên
1hoạt hình /

Các tệp XML xác định các hoạt ảnh thuộc tính. Chúng được lưu trong res / anim / folder và được truy cập từ lớp R.anim .
2màu/

Các tệp XML định nghĩa một danh sách trạng thái của các màu. Chúng được lưu trong res / color / và được truy cập từ lớp R.color .
3drawable /

Các tệp hình ảnh như tệp .png, .jpg, .gif hoặc XML được biên dịch thành bitmap, danh sách trạng thái, hình dạng, hoạt ảnh có thể vẽ được. Chúng được lưu trong res / drawable / và được truy cập từ lớp R.drawable .
4bố trí/

Các tệp XML xác định bố cục giao diện người dùng. Chúng được lưu trong res / layout / và được truy cập từ lớp R.layout .
5thực đơn/

Các tệp XML định nghĩa các menu ứng dụng, chẳng hạn như Trình đơn tùy chọn, Trình đơn ngữ cảnh hoặc Trình đơn phụ. Chúng được lưu trong res / menu / và được truy cập từ lớp R.menu .
6thô /

Các tệp tùy ý để lưu dưới dạng thô của chúng. Bạn cần gọi hàm Resources.openRawResource () với ID tài nguyên, là R.raw.filename để mở các tệp thô như vậy.
7giá trị /

Các tệp XML chứa các giá trị đơn giản, chẳng hạn như chuỗi, số nguyên và màu sắc. Ví dụ, dưới đây là một số quy ước về tên tệp cho các tài nguyên bạn có thể tạo trong thư mục này -

arrays.xml cho các mảng tài nguyên và được truy cập từ lớp R.array .

integers.xml cho các số nguyên tài nguyên và được truy cập từ lớp R.integer .

bools.xml cho tài nguyên boolean và truy cập từ lớp R.bool.

colors.xml cho các giá trị màu và được truy cập từ lớp R.color .

dimens.xml cho các giá trị thứ nguyên và được truy cập từ lớp R.dimen .

strings.xml cho các giá trị chuỗi và được truy cập từ lớp R.string .

styles.xml cho các kiểu và được truy cập từ lớp R.style .
số 8xml /

Các tệp XML tùy ý có thể được đọc khi chạy bằng cách gọi hàm Resources.getXML () . Bạn có thể lưu các tệp cấu hình khác nhau ở đây sẽ được sử dụng trong thời gian chạy.

Tài nguyên thay thế

Ứng dụng của bạn nên cung cấp các tài nguyên thay thế để hỗ trợ các cấu hình thiết bị cụ thể. Ví dụ: bạn nên bao gồm các tài nguyên có thể vẽ thay thế (ieimages) cho độ phân giải màn hình khác nhau và các tài nguyên chuỗi thay thế cho các ngôn ngữ khác nhau. Khi chạy, Android phát hiện cấu hình thiết bị hiện tại và tải các tài nguyên thích hợp cho ứng dụng của bạn.

Để chỉ định các lựa chọn thay thế cấu hình cụ thể cho một tập hợp các tài nguyên, hãy làm theo các bước sau

Tạo một thư mục mới trong res / named trong form <resources_name> - <config_qualifier> . Ở đây resources_name sẽ là bất kỳ tài nguyên nào được đề cập trong bảng trên, như bố trí, có thể vẽ được. Vòng loại sẽ chỉ định một cấu hình riêng lẻ mà các tài nguyên này sẽ được sử dụng. Bạn có thể kiểm tra tài liệu chính thức để có danh sách đầy đủ các vòng loại cho các loại tài nguyên khác nhau.

Lưu tài nguyên thay thế tương ứng trong thư mục mới này. Các tệp tài nguyên phải được đặt tên giống hệt như tệp tài nguyên mặc định như được hiển thị trong ví dụ bên dưới, nhưng các tệp này sẽ có nội dung cụ thể cho phương án thay thế. Ví dụ: mặc dù tên tệp hình ảnh sẽ giống nhau nhưng đối với màn hình có độ phân giải cao, độ phân giải của nó sẽ cao.

Dưới đây là ví dụ chỉ định hình ảnh cho màn hình mặc định và hình ảnh thay thế cho màn hình có độ phân giải cao.

MyProject/
   app/
      manifest/
         AndroidManifest.xml
   java/
      MyActivity.java   
      res/
         drawable/  
            icon.png
            background.png
         drawable-hdpi/  
            icon.png
            background.png  
         layout/  
            activity_main.xml
            info.xml
         values/  
            strings.xml 

Dưới đây là một ví dụ khác xác định bố cục cho ngôn ngữ mặc định và bố cục thay thế cho ngôn ngữ Ả Rập.

MyProject/
   app/
      manifest/
         AndroidManifest.xml
   java/
      MyActivity.java   
      res/
         drawable/  
            icon.png
            background.png
         drawable-hdpi/  
            icon.png
            background.png  
         layout/  
            activity_main.xml
            info.xml
         layout-ar/
            main.xml
         values/  
            strings.xml 

Truy cập tài nguyên

Trong quá trình phát triển ứng dụng của bạn, bạn sẽ cần phải truy cập các tài nguyên được xác định trong mã của bạn hoặc trong các tệp XML bố trí của bạn. Phần sau giải thích cách truy cập tài nguyên của bạn trong cả hai kịch bản -

Truy cập tài nguyên trong mã

Khi ứng dụng Android của bạn được biên dịch, một lớp R sẽ được tạo, chứa ID tài nguyên cho tất cả các tài nguyên có sẵn trong thư mục res / của bạn . Bạn có thể sử dụng lớp R để truy cập tài nguyên đó bằng cách sử dụng thư mục con và tên tài nguyên hoặc ID tài nguyên trực tiếp.

Thí dụ

Để truy cập res / drawable / myimage.png và thiết lập ImageView, bạn sẽ sử dụng mã sau:
ImageView imageView = (ImageView) findViewById(R.id.myimageview);
imageView.setImageResource(R.drawable.myimage);

Ở đây dòng đầu tiên của mã sử dụng R.id.myimageview để có được ImageView được xác định với id myimageview trong tệp Bố cục. Dòng thứ hai của mã làm cho việc sử dụng R.drawable.myimage để có được một hình ảnh với tên myimage có sẵn trong thư mục con có thể kéo dưới / res .

Thí dụ

Xem xét ví dụ tiếp theo trong đó res / values ​​/ strings.xml có định nghĩa sau:
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string  name="hello">Hello, World!</string>
</resources>
Bây giờ bạn có thể đặt văn bản trên một đối tượng TextView với ID msg bằng cách sử dụng một ID tài nguyên như sau:
TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello);

Thí dụ

Xem xét bố cục res / layout / activity_main.xml với định nghĩa sau:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent" 
   android:layout_height="fill_parent" 
   android:orientation="vertical" >
   
   <TextView android:id="@+id/text"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Hello, I am a TextView" />

   <Button android:id="@+id/button"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Hello, I am a Button" />
      
</LinearLayout>
Mã ứng dụng này sẽ tải bố cục này cho một Hoạt động, trong phương thức onCreate () như sau:
public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
}

Truy cập tài nguyên trong XML

Xem xét tệp XML res / values ​​/ strings.xml tài nguyên sau đây bao gồm tài nguyên màu và tài nguyên chuỗi
<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <string name="hello">Hello!</string>
</resources>
Bây giờ bạn có thể sử dụng các tài nguyên này trong tệp sơ đồ bố trí sau để đặt màu văn bản và chuỗi văn bản như sau:
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:textColor="@color/opaque_red"
   android:text="@string/hello" />
Bây giờ nếu bạn sẽ đi qua chương trước một lần nữa, nơi tôi đã giải thích Hello World! Ví dụ, và tôi chắc chắn bạn sẽ hiểu rõ hơn về tất cả các khái niệm được giải thích trong chương này.

Vì vậy, tôi khuyên bạn nên kiểm tra chương trước để biết ví dụ làm việc và kiểm tra cách tôi đã sử dụng các tài nguyên khác nhau ở cấp độ rất cơ bản.

Thứ Ba, 19 tháng 6, 2018

Android - Thành phần ứng dụng

Các thành phần ứng dụng là các khối xây dựng thiết yếu của một ứng dụng Android

Các thành phần này được kết hợp lỏng lẻo với tệp kê khai ứng dụng AndroidManifest.xml mô tả từng thành phần của ứng dụng và cách chúng tương tác.

NIIT-ICT
ảnh minh họa học lập trình android

Có bốn thành phần chính sau có thể được sử dụng trong một ứng dụng Android

Sr.NoThành phần & mô tả
1Hoạt động

Họ ra lệnh cho giao diện người dùng và xử lý tương tác của người dùng với màn hình điện thoại thông minh.
2Dịch vụ

Họ xử lý xử lý nền được liên kết với một ứng dụng.
3Bộ thu phát sóng

Họ xử lý giao tiếp giữa hệ điều hành Android và các ứng dụng.
4Các nhà cung cấp nội dung

Họ xử lý các vấn đề về quản lý dữ liệu và dữ liệu.

Hoạt động

Hoạt động đại diện cho một màn hình duy nhất có giao diện người dùng, Hoạt động trong ngắn sẽ thực hiện các tác vụ trên màn hình. Ví dụ: một ứng dụng email có thể có một hoạt động hiển thị danh sách các email mới, một hoạt động khác để soạn email và một hoạt động khác để đọc email. Nếu một ứng dụng có nhiều hoạt động, thì một trong số đó sẽ được đánh dấu là hoạt động được trình bày khi ứng dụng được khởi chạy.

Một hoạt động được thực hiện như một lớp con của lớp Activity như sau:
public class MainActivity mở rộng Activity { class MainActivity mở rộng Activity {    
}}

Dịch vụ

Một dịch vụ là một thành phần chạy trong nền để thực hiện các hoạt động dài hạn. Ví dụ: một dịch vụ có thể phát nhạc trong nền khi người dùng ở trong một ứng dụng khác hoặc ứng dụng có thể tìm nạp dữ liệu qua mạng mà không chặn tương tác của người dùng với hoạt động.

Một dịch vụ được thực hiện như một lớp con của lớp Service như sau:
lớp công khai MyService mở rộng dịch vụ { lớp MyService mở rộng dịch vụ {    
}}

Bộ thu phát sóng

Broadcast Receivers chỉ đơn giản là trả lời tin nhắn quảng bá từ các ứng dụng khác hoặc từ hệ thống. Ví dụ, các ứng dụng cũng có thể khởi tạo chương trình phát sóng để cho các ứng dụng khác biết rằng một số dữ liệu đã được tải xuống thiết bị và có sẵn để sử dụng, vì vậy đây là thiết bị phát sóng sẽ chặn thông báo này và sẽ bắt đầu hành động thích hợp.

Một bộ thu phát sóng được thực hiện như là một lớp con của lớp BroadcastReceiver và mỗi thông báo là trình phát như một đối tượng Intent.
lớp công khai MyReceiver mở rộng BroadcastReceiver { lớp MyReceiver mở rộng BroadcastReceiver {      
   public void onReceive (ngữ cảnh, ý định) {}public void onReceive ( ngữ cảnh , ý định ) {} 
}}

Các nhà cung cấp nội dung

Thành phần nhà cung cấp nội dung cung cấp dữ liệu từ một ứng dụng cho người khác theo yêu cầu. Các yêu cầu như vậy được xử lý bằng các phương thức của lớp ContentResolver . Dữ liệu có thể được lưu trữ trong hệ thống tệp, cơ sở dữ liệu hoặc ở một nơi khác hoàn toàn.

Nhà cung cấp nội dung được triển khai dưới dạng lớp con của lớp ContentProvider và phải triển khai bộ API tiêu chuẩn cho phép các ứng dụng khác thực hiện giao dịch.
lớp công khai MyContentProvider mở rộng ContentProvider { lớp MyContentProvider mở rộng ContentProvider {     
   public void onCreate () {}public void onCreate () {} 
}}
Chúng tôi sẽ xem xét kỹ các thẻ này trong khi bao gồm các thành phần ứng dụng trong các chương riêng lẻ.

Các thành phần bổ sung

Có các thành phần bổ sung sẽ được sử dụng trong việc xây dựng các thực thể được đề cập ở trên, logic của chúng và kết nối giữa chúng. Những thành phần này là

S.NoThành phần & mô tả

1Mảnh vỡ

Trình bày một phần giao diện người dùng trong một Hoạt động.
2Lượt xem

Các phần tử giao diện người dùng được vẽ trên màn hình bao gồm các nút, danh sách biểu mẫu, v.v.
3Bố cục

Xem các cấu trúc phân cấp kiểm soát định dạng màn hình và giao diện của chế độ xem.
4Mục đích

Tin nhắn các thành phần kết nối với nhau.
5Tài nguyên

Các yếu tố bên ngoài, chẳng hạn như chuỗi, hằng số và hình ảnh có thể vẽ được.
6Tệp kê khai

Tệp cấu hình cho ứng dụng.

Lập trình Android - RenderScript

Trong chương này, chúng ta sẽ tìm hiểu về Android RenderScript. Thông thường các ứng dụng trên Android được thiết kế để tiêu thụ tài nguyên ...