INTENT TRONG ANDROID LÀ GÌ

     
khóa học Lập trình lập trình sẵn Android khóa huấn luyện và đào tạo lập trình android cơ phiên bản Intent và Manifest trong Lập trình android

Dẫn nhập

Ở các bài CÁC THÀNH PHẦN GIAO DIỆN CƠ BẢN, họ đã cùng nhau tìm hiểu về:

View.ViewGroup.Drawables.Cách đổ View vào Activity.

Bạn đang xem: Intent trong android là gì

Và ở bài học hôm nay, họ sẽ cùng khám phá về Intent và Manifest. Do đặc điểm của 2 định nghĩa này rậm rạp lý thuyết, ít hình mẫu vẽ (ít chứ không hẳn không có), bản thân sẽ cố gắng đưa ra những hình minh họa nhất gồm thể. Bù lại, văn bản của bài xích khá ngắn, dễ dàng đọc.

Nội dung

Để đọc hiểu bài xích này giỏi nhất các bạn nên có kiến thức và kỹ năng cơ bạn dạng về các phần:

Cấu trúc của một project Android.Cách mở / import một project apk bằng game android Studio.

Trong bài học kinh nghiệm này, họ sẽ cùng mày mò các vấn đề:

Intent là gì?Chúng được áp dụng ra sao?Manifest là gì?Những thành phần trong file Manifest?

Truyền thuyết về Intent

Ngày xửa ngày xưa, khi sản xuất ra Android, những nhà công nghệ đã suy nghĩ về một vẻ ngoài truyền tài liệu giữa các screen (Activity), quá trình ngầm (Service) hay các Broadcast Receiver.

Nếu như trong lập trình ios hay Windows Phone, họ muốn nhập một ký tự ngẫu nhiên ở màn hình thứ nhất, dấn nút, sang screen thứ 2 hiển thị đúng ký tự kia thì:

Truyền tài liệu thẳng vào URL dạng bbb://v=1&c=2Rồi tiếp nối ở màn hình thứ 2, lấy tài liệu ra với key bởi v cùng c tương ứng.

Thì vào Android, những thứ hoàn toàn khác: Những dữ liệu được gửi vào một đối tượng người sử dụng thuộc lớp Bundle. Và đối tượng bundle này được đựng trong Intent.

Ví dụ: Ở một màn hình hiển thị A, chúng ta kích hoạt chức năng chụp hình ảnh (tức là màn hình B), chụp xong xuôi bạn lấy ảnh về màn hình hiển thị A. Lúc này Intent bao gồm là:

Hành rượu cồn kích hoạt tác dụng chụp ảnh.Hoạt đụng quay trở về màn hình hiển thị A sau thời điểm chụp.

*

Như vậy, không chỉ có là chuyển hẳn sang chuyển lại giữa những màn hình, Intent còn với theo tài liệu giữa các màn hình đó, khiến cho việc đổi khác trở phải đa nhiệm, hoạt bát hơn.

Sau đó là các trường hợp bạn có thể sử dụng Intent. Những trường phù hợp này trong quá trình làm việc hiện giờ lẫn về sau, các các bạn sẽ sử dụng hết sức thường xuyên:

Đơn giản là nhằm khởi chạy một activity khác

Để chuyển sang một Activity B từ Activity A, chúng ta gọi thủ tục startActivity(intent) của Activity đó.

Quay quay lại với Project HelloWorld mà họ đã có tác dụng từ bài 1 đến bài bác 4 trước đó. Lần này ta sẽ tạo nên một Activity mới và thực hành:

Tạo một Activity mới, rỗng, bằng cách chuột cần vào module “app” làm việc cột Project mặt trái, lựa chọn New > Activity > Empty Activity:

*

Ta để tên đến nó là SecondActivity, và apk Studio sẽ tự động sinh ra file layout xml mang đến nó, sau khi chấm dứt bước này chúng ta sẽ gồm 2 tệp tin là activity_second.xml và SecondActivity.java:

*

Để tiện biệt lập với MainActivity, chúng ta sẽ để màu cho SecondActivity là màu đen bằng cách thêm nằm trong tính android:background trong tệp tin activity_second.xml như sau (phần tô đá quý là phần thêm vào):

Trong tệp tin activity_main.xml, xóa hết các thành phần phía bên trong FrameLayout, chỉ vướng lại một Button cùng với code như sau:

activity_main.xml

với trong file Java tương ứng, call ra phương thức startActivity. Code không thiếu như sau:

MainActivity.java

public class MainActivity extends AppCompatActivity
Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button testButton = (Button) findViewById(R.id.btnClickMe); testButton.setOnClickListener(new View.OnClickListener()
Override public void onClick(View view) Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivity(intent); ); Vậy là bọn họ sẽ có được 2 activity:Activity đầu sẽ sở hữu được một nút Click me.

*

Khi nhấn vào nút Click me, ứng dụng sẽ chuyển sang screen thứ 2:

*

Sử dụng Intent nhằm khởi chạy Services

Services là một loại chuyển động ngầm vào Android. Để khởi chạy Services, tương tự như trên, ta hotline đến cách tiến hành startService(Intent).

Service là 1 trong những thành phần của ứng dụng, thay mặt đại diện cho ứng dụng để gia công một tác vụ dài hơi, cơ mà không ảnh hưởng trực tiếp với người dùng (ví dụ như khi download một file dung lượng lớn trường đoản cú internet). Service cũng rất có thể được cần sử dụng để cung ứng các vận dụng khác.

Chi máu về Service, chúng ta sẽ nói rõ rộng trong bài bác Service. Sau đây họ sẽ chế tạo một Service bù chú ý để minh họa mang lại Intent nhé.

Bước 1: tạo một class mang tên ServiceExample và thừa kế lớp Service.

*

Trình soạn thảo code vẫn báo lỗi, là do chúng ta chưa override hàm onBind của Service. Chúng ta sẽ sửa code thành:

package com.thietkewebshop.vn.helloworld;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.support.annotation.Nullable;public class ExampleService extends Service
Override public IBinder onBind(Intent intent) return null; Và ráng là lỗi sẽ đổi mới mất.

Bước 2: Service cũng đều có vòng đời gần như Activity, buộc phải nó cũng có hàm onCreate để override. Chúng ta sẽ override hàm này nhằm kiểm bệnh sự mãi mãi của Service:

package com.thietkewebshop.vn.helloworld;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.support.annotation.Nullable;import android.util.Log;public class ExampleService extends Service
Override public void onCreate() super.onCreate(); Log.e("Kteam", "Service da duoc khoi tao"); Do đặc điểm của Service: Nó là yếu tắc chạy không có giao diện nên lúc đóng app lại, Service vẫn còn đấy nguyên tạo lãng phí bộ nhớ không bắt buộc thiết. Thế nên ta sẽ hủy nó ngay trong khi được tạo, với ở quy trình bị bỏ (onDestroy), họ đặt thêm 1 log nữa.

Xem thêm: Những Câu Nói Hay Về Đà Lạt Phiêu Nhất, Đọc Là Mê Ngay, Những Câu Cap Hay Về Đà Lạt Tiểu Paris Mộng Mơ

package com.thietkewebshop.vn.helloworld;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.support.annotation.Nullable;import android.util.Log;public class ExampleService extends Service
Override public void onCreate() super.onCreate(); Log.e("Kteam", "Service da duoc khoi tao"); this.stopSelf();
Override public void onDestroy() super.onDestroy(); Log.e("Kteam", "Service da duoc huy"); Và cuối cùng, tạo thành Intent vào MainActivity với khởi chạy:

package com.thietkewebshop.vn.helloworld;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;public class MainActivity extends AppCompatActivity
Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Intent serviceIntent = new Intent(this, ExampleService.class); startService(serviceIntent); Bước 3: Khai báo Service trong AndroidManifest, tựa như như Activity. Bởi là Service dễ dàng và đơn giản nên việc khai báo cũng vô cùng đơn giản:

cùng cùng kiểm tra kết quả, chú ý chọn đúng trang bị ảo và tiến trình giống như những vùng khoanh đỏ:

*

Tạo với gửi đi Intent dạng explicit hoặc implicit

Trước tiên bọn họ cần gọi về 2 một số loại Intent trong Android:

Intent Explicit là Intent có đích đến ví dụ (là những class khác), tất cả thể bao gồm dữ liệu thêm (extra data). Ví dụ họ vừa có tác dụng ở trên đó là một Explicit Intent.

Intent intent = new Intent(MainActivity.this, SecondActivity.class);intent.putExtra("Key", "Value");startActivity(intent);Intent Implicit thì tương đối khác, đấy là dạng Intent mà gồm thể có khá nhiều đích đến xử trí nó: ví dụ như khi ước ao mở 1 URL thì các trình chăm sóc web của điện thoại cảm ứng thông minh đều rất có thể bắt được Intent này:Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://thietkewebshop.vn.com/"));startActivity(i);Với Intent Explicit, chúng ta đã có ví dụ làm việc trên (Đơn giản chỉ là khởi chạy một Activity khác).

Với Intent Implicit, chúng ta làm một lấy ví dụ nhỏ, cũng không yêu cầu sửa đổi gì nhiều, chỉ cần chỉnh code lại ở tệp tin MainActivity.java một chút:

package com.thietkewebshop.vn.helloworld;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;public class MainActivity extends AppCompatActivity
Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button testButton = (Button) findViewById(R.id.btnClickMe); testButton.setOnClickListener(new View.OnClickListener()
Override public void onClick(View view) Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("http://thietkewebshop.vn.com/")); startActivity(i); ); Run app , với bấm nút Click me, chúng ta sẽ thấy:

*

Tại sao?

Ở trên tôi đã truyền vào Intent một Uri (đường link) mang lại website của thietkewebshop.vn. Cùng Intent tại đây chỉ định “View” (xem) dòng Uri đó. Vày là địa chỉ cửa hàng web cần hiển nhiên là ta yêu cầu dùng trình duyệt.

Trong vật dụng kiểm thử sống trên có 2 trình lưu ý là Chrome Dev và trình săn sóc mặc định, nên app android sẽ cho chúng ta chọn xem sử dụng cái nào nhằm mở Uri.

Truyền dữ liệu giữa những Activity

Một Intent có thể chứa thêm tài liệu phụ. Các dữ liệu này được chứa trong đối tượng người tiêu dùng của lớp Bundle, hoàn toàn có thể lấy ra được bằng phương thức getExtras().

Các dữ liệu trong Bundle được lưu giữ dạng giống như Map (key-value). Key luôn là String, còn value nằm trong kiểu tài liệu nguyên thủy (primitive types) hoặc có các kiểu String, Bundle, Parcelable, Serializable.

Phía mặt Activity nhận vẫn lấy thông tin này ra bởi phương thức getAction() hoặc getData() của đối tượng người sử dụng Intent. Đối tượng Intent được lấy ra bằng thủ tục getIntent().

Thành phần nhận dữ liệu sẽ gọi ra phương thức getIntent().getExtras() để đưa dữ liệu ra.

Ví dụ:

Bundle extras = getIntent().getExtras();String data = extras.getString(Intent.EXTRA_TEXT);Một activity có thể được đóng lại bằng cách nhấn nút Back trên điện thoại. Vào trường hợp này, cách tiến hành finish() sẽ được hotline ra. Nếu activity được khởi tạo bằng phương thức startActivity(Intent) thì bên activity gọi sẽ không yêu cầu tài liệu trả về.

Mặt khác, ví như như activity lắp thêm hai được khởi tạo bằng phương thức startActivityForResult() thì dữ liệu có thể sẽ được trả về nhờ vào tham số resultCode đầu vào. Và để mang dữ liệu ra, bọn họ override cách làm onActivityResult() của activity đang có tác dụng việc. Và tất nhiên phương thức này sẽ sở hữu tham số resultCode nguồn vào để hiểu rằng acitivity nào đã điện thoại tư vấn đến nó trước đó:

Activity trước tiên sẽ khởi chạy activity thứ 2 và đặt cờ hiệu mong dữ liệu trả về:

Intent i = new Intent(MainActivity.this, SecondActivity.class);i.putExtra("Value1", "This value one for ActivityTwo ");i.putExtra("Value2", "This value two ActivityTwo");int REQUEST_CODE = 9;startActivityForResult(i, REQUEST_CODE);Activity vật dụng 2 hôm nay được gọi là sub-activity. Cách làm setResult sẽ trả về tài liệu mà acitivty thứ nhất mong muốn.
Overridepublic void finish() Intent data = new Intent(); data.putExtra("returnKey1", "Swinging on a star. "); data.putExtra("returnKey2", "You could be better then you are. "); setResult(RESULT_OK, data); super.finish();Code đầy đủ của SecondActivity.java đang là:

package com.thietkewebshop.vn.helloworld;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;public class SecondActivity extends AppCompatActivity
Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); finish();
Override public void finish() Intent data = new Intent(); data.putExtra("returnKey1", "Gia tri tra ve sầu thu nhat. "); data.putExtra("returnKey2", "Gia tri tra ve sầu thu hai. "); setResult(RESULT_OK, data); super.finish(); Activity lần đầu giờ đã lấy tài liệu từ activity thứ 2 thông qua việc override cách tiến hành onActivityResult.
Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) if (resultCode == RESULT_OK && requestCode == 9) if (data.hasExtra("returnKey1")) Toast.makeText(this, data.getExtras().getString("returnKey1"), Toast.LENGTH_SHORT).show(); Code khá đầy đủ của MainActivity.java

package com.thietkewebshop.vn.helloworld;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.Toast;public class MainActivity extends AppCompatActivity
Override protected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button testButton = (Button) findViewById(R.id.btnClickMe); testButton.setOnClickListener(new View.OnClickListener()
Override public void onClick(View view) // kiểm tra khoi tao activity co du lieu tra ve sầu Intent i = new Intent(MainActivity.this, SecondActivity.class); i.putExtra("Value1", "Gia tri thu nhat "); i.putExtra("Value2", "Gia tri thu nhì "); int REQUEST_CODE = 9; startActivityForResult(i, REQUEST_CODE); );
Override protected void onActivityResult(int requestCode, int resultCode, Intent data) if (resultCode == RESULT_OK && requestCode == 9) if (data.hasExtra("returnKey1")) Toast.makeText(this, data.getExtras().getString("returnKey1"), Toast.LENGTH_SHORT).show(); Do SecondActivity hoàn thành rất nhanh (hàm finish được điện thoại tư vấn ngay onCreate) nên chúng ta sẽ chỉ chú ý thấy thông báo như sau:

*

Manifest

Mọi vận dụng đều cần phải có một file AndroidManifest.xml ở thư mục gốc. AndroidManifest báo tin cơ bạn dạng của vận dụng cho hệ điều hành Android ví dụ như như:

Tên java package của ứng dụng.Các thành phần của ứng dụng, như danh sách các thành phần của ứng dụng, như activity, services, broadcast receiver,…Tính chất của các thành phần trong áp dụng (ví dụ, một app có không ít activity thì activity nào sẽ được gọi đầu tiên khi vào app).Đánh giá những tiến trình đựng runtime của ứng dụng.Danh sách những quyền truy vấn của áp dụng cần được người tiêu dùng cho phép.Phiên phiên bản Android buổi tối thiểu.Các thư viện liên kết với vận dụng Android.

Một tệp tin AndroidManifest.xml sẽ sở hữu được dạng cơ bạn dạng như sau, mang sử với ứng dụng HelloWorld đã làm:

họ dễ thấy: Ứng dụng bao gồm activity MainActivity là activity vào đầu tiên sau lúc chạy app nhờ ở trong tính android:name = “android.intent.action.MAIN”. Và không tồn tại quyền truy vấn gì đặc trưng vì không có thẻ

Kết luận

Qua bài bác này bọn họ đã nạm được cơ bản về Intent – luồng tài liệu động giúp truyền thông tin giữa các screen và Manifest – tệp tin liệt kê những thành phần ứng dụng. Đây là 2 phần về tối cơ phiên bản của ngẫu nhiên ứng dụng apk nào.

Bài sau họ sẽ tò mò về VÒNG ĐỜI CỦA MỘT ACTIVITYnhé. Sẽ có một câu đố bé dại để giúp chúng ta nắm chắc chắn thêm (có lời giải, yên tâm).

Cảm ơn các bạn đã theo dõi bài bác viết. Hãy nhằm lại bình luận hoặc góp ý của bản thân để vạc triển nội dung bài viết tốt hơn. Đừng quên “Luyện tập – thách thức – không ngại khó”.

Xem thêm: " Sơ Xuất Trong Công Việc - Sơ Suất Hay Sơ Xuất, Từ Nào Mới Đúng Chính Tả

Thảo luận

Nếu chúng ta có ngẫu nhiên khó khăn hay thắc mắc gì về khóa học, đừng rụt rè đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc vào mục HỎI & ĐÁP trên tủ sách thietkewebshop.vn.com để nhận thấy sự hỗ trợ từ cùng đồng.