intent trong android la gi

Đâ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

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

Bạn đang xem: intent trong android la gi

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.

Xem thêm: đấu phá thương khung full

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).

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

Xem thêm: đọc truyện cô vợ thay thế

 @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