2016-09-05 11 views
9

Chúng tôi có một ứng dụng với một Hoạt động có thể được bắt đầu bằng hai cách:Tại sao chúng ta có được những ý tưởng "không hợp lệ" này?

  • Từ Hoạt động khác - luôn luôn có một số dữ liệu thêm điền vào
  • Từ liên kết sâu

Theo như tôi có thể thấy điều này luôn hoạt động tốt. Chúng tôi có thể nhận được Intent.ACTION_VIEW với URI dữ liệu hoặc chúng tôi nhận được một số tính năng bổ sung chuỗi.

Tuy nhiên, chúng tôi có một số ít trường hợp hành động là Intent.ACTION_MAIN và không có thêm dữ liệu nào.

Các toString() của Ý định là như sau (tên lớp thay đổi):

Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10400000 cmp=com.example.OurActivity } 

Intent.getExtras() lợi nhuận null, Intent.getDataString() lợi nhuận null.

Trong trường hợp này, điều này có thể xảy ra? Tại sao danh mục cho Hoạt động Intent.CATEGORY_LAUNCHER? Làm cách nào để chúng tôi có được dữ liệu cần thiết để hiển thị cho người dùng nội dung phù hợp?

launchMode không được chỉ định cho Hoạt động. Chỉ IntentFilter trong AndroidManifest.xml là dành cho liên kết sâu (chứ không phải danh mục trình khởi chạy).

Sự cố xảy ra trên Android 4-6 trên nhiều loại thiết bị.

Edit: Quên đề cập đến những lá cờ:

Khi in ra gợi ý những lá cờ cho tiếp cận mục đích là FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_BROUGHT_TO_FRONT. Tôi cho rằng điều đó có thể có liên quan ở đây.

Trả lời

1

tôi tin rằng, tôi đóng đinh nó:

Có bệ phóng đang, như Nova Launcher cho phép người dùng bắt đầu với bất kỳ của ứng dụng của Activities, thay vì dòng chảy bình thường:

enter image description here

Ví dụ:, bạn có thể thêm lối tắt trên màn hình để bắt đầu ứng dụng khách Gmail với Hoạt động thiết lập tài khoản.

Và trong trường hợp này, Hoạt động đang được bắt đầu với trống Extras và về mặt kỹ thuật, nó sẽ trở thành bản khởi chạy Activity.

+0

Tôi tin rằng bạn là đúng. Nova Launcher không gửi bất kỳ hành động hoặc danh mục nào, nhưng các trình khởi chạy khác có thể làm điều đó một chút khác biệt/đúng. –

0

Bây giờ AndroidManifest.xml được điều khiển bởi hệ thống xây dựng, nó thường xảy ra mà các thư viện mà bạn đưa vào cũng thêm những thứ vào tệp kê khai mà tôi nghi ngờ có thể đang xảy ra ở đây.

Mặc dù bạn nói rằng chỉ có một IntentFilter trong tệp kê khai, bạn có thực sự đã kiểm tra ứng dụng đã cài đặt để xem những gì tệp kê khai của nó nói (chứ không phải dựa vào những gì bạn cho là bạn đưa vào mã nguồn)?

Các ứng dụng khác nhau có sẵn trong Cửa hàng Play để hiển thị cho bạn tệp kê khai của ứng dụng đã cài đặt - bao gồm cả Trình thám tử ứng dụng (tôi đã viết).

+0

Đề xuất tốt! Tuy nhiên, không có gì được tiêm cho hoạt động đó. (Ứng dụng tốt đẹp mặc dù! Có thể một cái gì đó để thay đổi ManifestViewer với trong ứng dụng dev của tôi (https://github.com/roys/java-android-developertools#developer-tools-for-android).) –

Các vấn đề liên quan