Ý nghĩa của android.intent.action.MAIN là gì?


85

Tôi đã thấy rất nhiều cách giải thích khó hiểu khác nhau ..

<intent-filter>
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

Ý nghĩa của

<action android:name="android.intent.action.MAIN" />

 <category android:name="android.intent.category.LAUNCHER" />

 <category android:name="android.intent.category.DEFAULT" />

Câu trả lời:


73

android.intent.action.MAIN có nghĩa là hoạt động này là điểm vào của ứng dụng, tức là khi bạn khởi chạy ứng dụng, hoạt động này được tạo.

Từ các tài liệu

ACTION_MAIN with category CATEGORY_HOME -- Launch the home screen.

Ngoài ra, từ đây

Hoạt động Hành động Bắt đầu như một điểm nhập chính, không mong đợi nhận dữ liệu.

android.intent.category.DEFAULT chủ yếu được sử dụng cho các ý định ngầm. Nếu hoạt động của bạn muốn được bắt đầu bởi một ý định ngầm, nó nên bao gồm catetory này trong bộ lọc của nó. Nếu Hoạt động của bạn có thể được bắt đầu bởi một Ý định ngầm khi không có danh mục cụ thể nào được chỉ định cho nó, bộ lọc Ý định của nó nên bao gồm danh mục này.

android.intent.category.LAUNCHER

danh mục - Cung cấp thông tin bổ sung về hành động cần thực thi.

CATEGORY_LAUNCHER có nghĩa là nó sẽ xuất hiện trong Trình khởi chạy dưới dạng ứng dụng cấp cao nhất

Xem tài liệu ..

  1. http://developer.android.com/reference/android/content/Intent.html
  2. http://developer.android.com/guide/topics/manifest/action-element.html

3
Không, MAIN một mình sẽ không "bắt đầu hoạt động về nhà". MAINcó nhiều công dụng.
CommonsWare

92

ACTION_MAINđược coi là một điểm đầu vào cho ứng dụng. Thông thường, nó kết hợp với CATEGORY_LAUNCHERtrong một <intent-filter>để chỉ ra một hoạt động sẽ xuất hiện trong trình khởi chạy của màn hình chính hoặc trong bất kỳ thứ gì khác tự coi là trình khởi chạy. Các "bệ phóng" như vậy có thể truy vấn PackageManager, sử dụng queryIntentActivities(), để tìm các hoạt động đó và hiển thị chúng cho người dùng.

Tuy nhiên, ACTION_MAINcó thể sử dụng kết hợp với các loại khác cho các mục đích chuyên dụng khác. Ví dụ: CATEGORY_CAR_DOCKvới ACTION_MAINbiểu thị một hoạt động nên được coi là ứng cử viên sẽ được hiển thị khi người dùng thả điện thoại của họ vào đế cắm trên ô tô do nhà sản xuất cung cấp.

Khi một Intentđược sử dụng với startActivity(), nếu dấu Intentchưa được đặt vào một danh mục, nó sẽ được đặt vào CATEGORY_DEFAULT. Do đó, một <activity> <intent-filter>cần phải chỉ định một số <category> , sử dụng <category android:name="android.intent.category.DEFAULT" />nếu không có gì khác.


1
ủng hộ! Tôi biết rằng bạn sẽ trả lời điều này và tôi đã chờ đợi để đọc nó như mong đợi một câu trả lời rõ ràng và ngắn gọn. cảm ơn
Spurdow

6
Uhm, bạn vẫn chưa giải thích tại sao chúng ta cần cả hai. Ý tôi là, ACTION MAIN = NHẬP ĐIỂM, hiểu rồi. CATEGORY_LAUCHER = Để chỉ ra rằng một hoạt động sẽ xuất hiện trong trình khởi chạy của màn hình chính. Hai câu này giống nhau chỉ khác nhau về cách diễn đạt phải không?
FRR

9
@feresr: Không, họ không phải vậy. Bạn có thể nói rằng bằng cách đọc các câu trả lời, trong đó có đoạn thứ hai, trong đó cung cấp một ví dụ về một khác nhau sử dụng ACTION_MAINkhông liên quan đến một launcher nhà màn hình kiểu.
CommonsWare

2
@ vgokul129: Bởi vì trình khởi chạy màn hình chính đặc biệt tìm kiếm các hoạt động có <intent-filter>cả hai <action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />.
CommonsWare

2
@ vgokul129: "Nói chính xác trong khi nhấp vào biểu tượng trong trình khởi chạy, không có startActivity (ý định) nào được gọi" - chỉ khi bạn viết màn hình chính của riêng mình bằng trình khởi chạy của riêng bạn cung cấp khả năng này. Hoạt động của trình khởi chạy màn hình chính phụ thuộc vào người triển khai màn hình chính đó. Hầu hết tập trung vào việc bắt đầu các hoạt động có thể truy cập được quảng cáo, vì đó là vai trò chính của trình khởi chạy. Bạn được hoan nghênh khi có một hoạt động gọi finish()ngay lập tức, nhưng người dùng sẽ nghĩ rằng ứng dụng của bạn đã bị hỏng.
CommonsWare

2
<action android:name="android.intent.action.MAIN"/>

Là hoạt động chính cho ứng dụng này

 <category android:name="android.intent.category.LAUNCHER" />

Nó nằm trong danh mục LAUNCHER, có nghĩa là nó có một biểu tượng trong bất kỳ thứ gì tự coi là “launcher”, chẳng hạn như màn hình chính

 <category android:name="android.intent.category.DEFAULT" />

Lệnh gọi startActivity () sẽ luôn thêm danh mục DEFAULT nếu không có danh mục nào khác được chỉ định.

Nói chung chỉ cần thêm android.intent.category.DEFAULTngay cả khi bạn có các Danh mục khác. Điều này sẽ đảm bảo rằng nếu Ý định yêu cầu không cung cấp bất kỳ Danh mục nào trong khi bắt đầu sử dụng ý định startActivity(intent), thì Hoạt động tiếp nhận của bạn cũng có thể nhận được các Ý định đó ..

Nguồn: Hướng dẫn lập trình viên bận rộn để phát triển Android

https://commonsware.com/Android/

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.