Đây là những kỹ năng tuy nhiên tôi đã tổ hợp được về Intent, kỳ vọng sẽ hỗ trợ ích với những bạn
Bạn đang xem: intent trong android la gi
1. Intent là gì?
Intent là 1 trong những đối tượng người dùng message bạn cũng có thể dùng nhằm request một hành vi từ 1 vài ba component nhập ứng dụng
2. Các loại Intent
Intent với 2 loại đó là Explicit Intent và Implicit Intent
- Explicit Intent (dịch word by word tức là intent tường minh):
Hiểu giản dị và đơn giản explicit intents là intent xác lập rõ rệt và ví dụ những bộ phận nhập cuộc hành vi.
Example:
Intent intent = new Intent(MainActivity.this, DialerActivity.class);
startActivity(intent);
như nhập ví dụ bên trên tiếp tục xác lập đúng chuẩn Activity nhận intent này là DialerActivity
- Implicit Intent (dịch word by word tức là Intent ko tường minh)
Loại Intents này chỉ ra hành động rất cần được triển khai (action) và dữ liệu mang lại hành vi cơ (data). Khi các bạn dùng implicit intent, khối hệ thống Android tiếp tục mò mẫm kiếm toàn bộ bộ phận phù hợp nhằm start bằng phương pháp cơ hội đối chiếu nội dung của Intent được gửi với những Intent filter được khai báo nhập phần mềm không giống. Nếu intent được gửi cơ khớp với intent filter nhập một component hoặc một phần mềm này cơ, thì tức thì ngay tức khắc khối hệ thống tiếp tục phát động bộ phận cơ và hỗ trợ mang lại nó intent ban sơ được gửi . Nếu nhiều intent filter tương mến thì khối hệ thống tiếp tục hiển thị vỏ hộp thoại nhằm người tiêu dùng hoàn toàn có thể lựa chọn phần mềm này tiếp tục dùng.
Intent filter (bộ thanh lọc intent) là 1 trong những thẻ nhập minifest nhằm mục tiêu xác lập loại intent tuy nhiên bộ phận chứa chấp intent filter cơ mong muốn nhận. ví dụ thế này nhé: khai báo intent filter cho 1 activity nhập manifest điều này tức là nhập số những intent được gửi chuồn intent này với nội dung tương mến vs nội dung nhập thẻ intent filter thì nó sẽ bị nhận intent cơ. Và ngược lại nếu như khách hàng ko khai báo bất kì intent filter này mang lại activity của tôi thì activity cơ chỉ hoàn toàn có thể start vì chưng một explicit intent (intent tường minh)
Hình hình họa bên trên tế bào mô tả cơ hội một implicit intent được đem trải qua khối hệ thống apk nhằm start một activity không giống.
[1]Activity A tạo nên một intent với cùng 1 action ví dụ này cơ (chẳng hạn ACTION_VIEW, ACTION_GET_CONTENT,..) rồi startActivity().
[2] Hệ thống apk tiếp tục mò mẫm kiếm toàn bộ phần mềm tuy nhiên intent filter của phần mềm cơ phù phù hợp với intent được gửi chuồn kể từ Activity A.
[3] khi nhìn thấy thành phẩm khớp, khối hệ thống tiếp tục start Activity cơ (Avtivity B) vì chưng lời nói gọi onCreate() và passing qua loa mang lại nó intent được gửi kể từ activity A
Example:
Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.setData(Uri.parse(Constant.TYPE_MESSAGE));
startActivity(sendIntent);
3. Cấu trúc của một Intent
Một đối tượng người dùng intent tiếp tục đem theo gót vấn đề tuy nhiên khối hệ thống apk cần thiết nhằm ra quyết định bộ phận này sẽ tiến hành start. Và những vấn đề cơ bao hàm :
Component Name
Action
Data
Category
Extra
Flag
Component name
Tên của component được start.
Action
Là một chuỗi xác lập hành vi cộng đồng nhằm triển khai (chẳng hạn như coi hoặc chọn)
Dưới đấy là 2 action phổ cập nhằm start một activity
static final String ACTION_TIMETRAVEL = "com.example.action.TIMETRAVEL";
Data
Sử dụng một đối tượng người dùng Uri tham ô chiếu cho tới tài liệu sẽ tiến hành triển khai một hành vi này cơ. Loại tài liệu hỗ trợ thông thường được ra quyết định vì chưng action của intent. Ví dụ nếu như action là ACTION_EDIT => Uri tham ô chiếu cho tới data đang được cần thiết edit
Khi tạo nên một intent ko tường minh điều cần thiết là hướng dẫn và chỉ định loại tài liệu, điều này sẽ hỗ trợ khối hệ thống apk hoàn toàn có thể nhìn thấy bộ phận tốt nhất có thể nhằm nhận intent của bạn
để phối data dùng method setData()
để phối type dùng method setType()
Example:
Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.setData(Uri.parse(Constant.TYPE_MESSAGE));
sendIntent.setType("text/plain");
startActivity(sendIntent);
Category
Một chuỗi chứa chấp vấn đề bổ sung cập nhật về loại bộ phận tiếp tục xử lý intent.
Để sẽ có được những intent ko tường minh thì nên phần mềm nên khai báo category nhập manifest, Và độ quý hiếm mạc lăm le là CATEGORY_DEFAULT.
Ví dụ, khai báo activity với cùng 1 intent filter nhằm nhận một intent với action là ACTION_SEND khi loại tài liệu là văn bản:
<activity android:name="ShareActivity">
<intent-filter>
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>
Extra
Các cặp key-value đem vấn đề bổ sung cập nhật quan trọng nhằm hoàn thành xong hành vi được đòi hỏi.
Flag
Cờ được khái niệm nhập lớp Intent có tác dụng như siêu tài liệu mang lại intent . Cờ hoàn toàn có thể đi ra mệnh lệnh khối hệ thống Android về phong thái khởi chạy một (ví dụ, hoạt động và sinh hoạt tiếp tục nằm trong về tác vụ nào ) và cách xử trí sau khoản thời gian nó được khởi chạy (ví dụ, nó với thuộc sở hữu list hoạt động và sinh hoạt thời gian gần đây hoặc không).
Xem thêm: tai game mien phi temple run
4. Gửi tài liệu Một trong những activity
Gửi tài liệu dùng explicit intent
Để truyền tài liệu mang lại intent, tao sử dụng phương thức putExtra(). Extra là một cặp key/value. key luôn luôn luôn luôn là loại string. value bạn cũng có thể dùng loại tài liệu vẹn toàn thủy hoặc đối tượng người dùng của String, Bundle, ....
Thành phần tiêu thụ hoàn toàn có thể lấy lại được đối tượng người dùng intent trải qua hàm getIntent(). Để kéo ra được tài liệu, tùy nằm trong nhập loại tài liệu tất cả chúng ta truyền rằng, dùng những phương thức getStringExtra(), getIntExtra();
Example:
public void sendByExtra(){
Intent intent = new Intent(ActivityA.this,ActivityB.class);
intent.putExtra(TITLE,edtTitle.getText().toString());
intent.putExtra(DESCRIPTION,edtDescription.getText().toString());
startActivity(intent);
}
Hoặc dùng đối tượng người dùng Bundle. Đóng gói toàn bộ tài liệu nhập vào Bundle, tiếp sau đó chèn bundle nhập intent vì chưng method putExtras()
Example:
public void sendByBundle(){
Intent intent = new Intent(ActivityA.this,ActivityB.class);
Bundle bundle = new Bundle();
bundle.putString(TITLE,edtTitle.getText().toString());
bundle.putString(DESCRIPTION,edtDescription.getText().toString());
intent.putExtras(bundle);
//intent.putExtra(BUNDLE,bundle);(hoặc)
startActivity(intent);
}
truyền tài liệu dùng Implicit Intent
để gửi một implicit intent bạn phải phối mang lại nó một vài tính chất như setAction, setType, setData,..
và bên dưới đấy là một ví dụ dùng ACTION_SEND
Có thật nhiều phần mềm apk được chấp nhận các bạn share tài liệu với những người dân không giống, ví dụ: facebook, G+, Gmail... quý khách hoàn toàn có thể gửi tài liệu cho tới một vài ba bộ phận này cơ. ví dụ sau đây tiếp tục tế bào mô tả việc dùng intent như vậy
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(android.content.Intent.EXTRA_TEXT,"News for you!");
startActivity(intent);
5. Intent Result (lấy lại thành phẩm kể từ activity)
Một activity hoàn toàn có thể được đóng góp lại trải qua button back bên trên Smartphone. Trong tình huống cơ, hàm finish() sẽ được thực thi đua. Nếu activity đã và đang được khởi chạy cùng theo với hàm startActivity(intent), người gọi ko quan trọng nên với thành phẩm hoặc phản hồi kể từ activity tuy nhiên hoàn toàn có thể close tức thì ngay tức khắc.
Nếu các bạn start một activity cùng theo với hàm startActivityForResult(), như thế là bạn muốn với phản hồi từ sub-activity. Khi một sub-activity kết thúc đẩy, hàm onActivityResult() trên activity thân phụ sẽ tiến hành gọi và bạn cũng có thể triển khai hành vi dựa vào thành phẩm.
public void onClick(View view) {
Intent i = new Intent(this,ActivityTow.class);
i.putExtra("value1","This value one for activityTow");
i.putExtra("Value2", "This value two ActivityTwo");
// phối the request code to tát any code you lượt thích,
// you can identify the callback via this code
startActivityForResult(i, REQUEST_CODE);
}
Nếu các bạn dùng hàm startActivityForResult(), thì sau khoản thời gian start activity tiếp tục gọi cho tới sub-activity
Nếu hàm sub-activity kết thúc đẩy, nó sẽ bị gửi tài liệu cho tới activity thân phụ tiếp tục gọi nó trải qua intent. điều này được xử lý bên trên hàm finish(), hoặc bạn cũng có thể setResult tức thì bên trên Điện thoại tư vấn back onCreate() tiếp sau đó kết thúc đẩy sub-actitvity vì chưng finish()
@Override
public void finish() {
// Prepare data intent
Intent data = new Intent();
data.putExtra("returnKey1", "Swinging on a star. ");
data.putExtra("returnKey2", "You could be better then you are. ");
// Activity finished ok, return the data
setResult(RESULT_OK, data);
super.finish();
}
Một sub-activity kết thúc đẩy, hàm onActivityResult() nhập activity thân phụ sẽ tiến hành gọi
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK && requestCode == REQUEST_CODE) {
if (data.hasExtra("returnKey1")) {
Toast.makeText(this, data.getExtras().getString("returnKey1"),
Toast.LENGTH_SHORT).show();
}
}
}
Example
MainActivity
public class MainActivity extends Activity {
/* REQUEST_CODE là 1 trong những độ quý hiếm int dùng làm lăm le danh từng request. Khi sẽ có được thành phẩm, hàm callback tiếp tục trả về nằm trong REQUEST_CODE này nhằm tao hoàn toàn có thể xác lập và xử lý thành phẩm. */
private static final int REQUEST_CODE_EXAMPLE = 0x9345;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Tạo một Intent nhằm start DetailActivity
final Intent intent = new Intent(this, DetailActivity.class);
// Start DetailActivity với request code vừa mới được khai báo trước đó
startActivityForResult(intent, REQUEST_CODE_EXAMPLE);
}
// Khi thành phẩm được trả về kể từ Activity không giống, hàm onActivityResult sẽ tiến hành gọi.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// Kiểm tra requestCode với trùng với REQUEST_CODE vừa vặn dùng
if(requestCode == REQUEST_CODE_EXAMPLE) {
// resultCode được phối vì chưng DetailActivity
// RESULT_OK cho là thành phẩm này tiếp tục trở thành công
if(resultCode == Activity.RESULT_OK) {
// Nhận tài liệu kể từ Intent trả về
final String result = data.getStringExtra(DetailActivity.EXTRA_DATA);
// Sử dụng thành phẩm result bằng phương pháp hiện nay Toast
Toast.makeText(this, "Result: " + result, Toast.LENGTH_LONG).show();
} else {
// DetailActivity ko thành công xuất sắc, không tồn tại data trả về.
}
}
}
}
DetailActivity
public class DetailActivity extends Activity {
// Biến constant được dùng làm lăm le danh tài liệu được truyền Một trong những Activity
public static final String EXTRA_DATA = "EXTRA_DATA";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
final View button = findViewById(R.id.button);
// Trả về thành phẩm sau khoản thời gian click nhập button
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Tạo một Intent mới nhất nhằm chứa chấp tài liệu trả về
final Intent data = new Intent();
// Truyền data nhập intent
data.putExtra(EXTRA_DATA, "Some interesting data!");
// Đặt resultCode là Activity.RESULT_OK to
// thể hiện nay tiếp tục thành công xuất sắc và với chứa chấp thành phẩm trả về
setResult(Activity.RESULT_OK, data);
// gọi hàm finish() nhằm đóng góp Activity thời điểm hiện tại và quay trở lại MainActivity.
finish();
}
});
}
@Override
public void onBackPressed() {
// đặt điều resultCode là Activity.RESULT_CANCELED thể hiện
// tiếp tục thất bại khi người tiêu dùng click nhập nút Back.
// Khi này sẽ không còn trả về data.
setResult(Activity.RESULT_CANCELED);
super.onBackPressed();
}
}
Tài liệu tham ô khảo
https://developer.android.com/guide/components/intents-filters
https://www.vogella.com/tutorials/AndroidIntent/article.html
Thanks for reading and hope to tát useful for you
Xem thêm: thong tin game mobile moi nhat
Bình luận