2010-11-04 34 views
22

Tôi đã tìm kiếm tài liệu Android và vì một số lý do điên rồ, tôi không thể tìm thấy danh sách tất cả các bộ lọc có chủ ý có sẵn.Android - Cách nhận danh sách tất cả các bộ lọc có chủ ý có sẵn?

Tôi đang tìm một bộ lọc ý định, sẽ làm như thế, thông báo cho tôi qua Broadcast Receiver rằng một Hoạt động cụ thể (trình duyệt ví dụ hoặc email) đã được bắt đầu hoặc ở nền trước. Bất cứ ai có thể giúp tôi với điều đó.

Trả lời

6

Bạn sẽ không tìm thấy điều đó. Các bộ lọc ý định được xác định bởi ứng dụng. Bạn sẽ phải xem tài liệu cho ứng dụng paritcular mà bạn quan tâm.

+0

Ahan hãy để tôi nhìn vào đó ... –

+1

Và tôi có thể nói với bạn rằng bạn sẽ không thể xác định thời điểm hầu hết các ứng dụng bắt đầu và bạn gần như chắc chắn sẽ không thể biết khi nào chúng đi vào nền trước. Tất nhiên, bạn được quyền sửa đổi firmware Android nếu bạn cần thông tin này cho một mục đích cụ thể. Nhưng nếu không thì đó là vấn đề bảo mật. – Falmarri

+0

không may chỉ là một phần nhỏ của ứng dụng cung cấp tài liệu cho ý định của họ ... – pleerock

3

(câu trả lời một phần) IntentFilters được định nghĩa trong tệp AndroidManifest.xml có trong tệp .apk của ứng dụng. (Trong -> -> - element> XML, như thế này:.

tôi đã không tìm thấy một API để tìm kiếm tất cả Intents quy định tại tất cả các file .apk được lưu trữ trên một thiết bị Hệ thống tìm kiếm danh sách của tất cả các ý định trong: android.content.Context.startActivity (Intent intent) Gọi phương thức gốc trong android.app.ActivityManagerNative.startActivity() sử dụng cơ chế truyền thông interprocess (IPC) (sử dụng tuần tự hóa thông tin trong một 'Parcel' đối tượng) để tìm kiếm các mục đích và bắt đầu hoạt động.Vì vậy, tôi có thể tìm thấy nó như thế nào là thực sự thực hiện

Dường như bạn có thể truy cập đọc vào tập tin .apk (ma ny được lưu trữ trong /system/app/*.apk). Tệp .apk là tệp .jar và tệp AndroidManifest.xml có sẵn trong đó, do đó, một chương trình sẽ có thể đọc và phân tích tệp kê khai và tìm IntentFilters - nhưng sẽ có API để thực hiện việc này dễ dàng.

+0

Tôi vừa thử nó và AndroidManifest.xml bằng cách nào đó đã được trình bày. Tôi có thể đọc một số chuỗi nhưng phần còn lại chỉ là bytecode. – Nulano

34

danh sách PackageExplorer tất cả ý-bộ lọc được xác định trong các ứng dụng trong điện thoại của bạn

Để trả lời câu hỏi của bạn: Bạn có thể tạo mục đích lọc (s) mà bạn muốn được sử dụng để gây ra hoạt động của bạn được lựa chọn khi một chương trình là tìm kiếm một dịch vụ hoặc hoạt động. Vì vậy, mỗi Hoạt động trong một Gói xác định danh sách các bộ lọc ý định của riêng nó.

Tôi thấy hữu ích khi có danh sách tất cả các bộ lọc ý định được xác định bởi tất cả các ứng dụng trên thiết bị - vì vậy sẽ biết ứng dụng nào sẽ gọi khi hệ thống được xử lý. Tôi đặt một ứng dụng miễn phí trên Android Market, tìm kiếm 'Package Explorer' để tìm kiếm tất cả ứng dụng có thể tìm thấy trên thiết bị của bạn, giải mã tệp AndroidManifest.xml và hiển thị danh sách tất cả các bộ lọc được xác định bởi tất cả các ứng dụng. Bảng của tất cả các bộ lọc có thể được sắp xếp theo các hành động, thể loại, trường dữ liệu (tức là lược đồ hoặc mimetype), tên gói hoặc loại bộ lọc ý định để bạn có thể tìm thấy tất cả các Activites trên thiết bị của bạn.

Trình khám phá gói cũng thu thập tất cả các trường quyền sử dụng trong tệp kê khai và hiển thị danh sách ứng dụng nào yêu cầu quyền nào. Vì vậy, bạn có thể tìm thấy tất cả các gói sử dụng 'SEND_SMS' hoặc một cái gì đó như thế. Việc nhấp vào tên của một gói sẽ hiển thị tệp AndroidManifest.xml đã giải mã (không nén) cho gói.

+0

Có phải là nó - https://play.google.com/store/apps/details?id=fr.xgouchet.packageexplorer&hl=vi? –

+0

@techtonik Có điều này là rõ ràng. Phần _Broadcast Receivers_ cho mỗi ứng dụng, nó hoạt động tốt cho tôi. – Guillaume

4

Có một "cơ sở dữ liệu" tại http://www.openintents.org/en/ cố gắng thu thập bộ lọc ý định đã biết. Ngoài ra các doumentation cho Intent liệt kê một số.

3

bài này là cũ nhưng đối với bất cứ ai đang tìm kiếm thông tin manifest từ các ứng dụng được cài đặt trên một android đặc biệt dwld ứng dụng GOD này:

https://play.google.com/store/apps/details?id=jp.susatthi.ManifestViewer

+1

làm thế nào để bạn làm điều đó trong mã? –

+1

ManifestViewer hiện đang gặp sự cố khi cố gắng xem mục đích –

3

Bạn có thể kiểm tra danh sách các hành động tiêu chuẩn và loại trong sdk /platforms/android-x/data/broadcast_actions.txt

+0

Xin lỗi, danh mục tiêu chuẩn của tôi nằm trên 'categories.txt' – IronBlossom

+0

Bạn có thể chỉnh sửa bài đăng của riêng mình và cũng cung cấp liên kết đến nơi bạn tìm thấy? – not2qubit

10

Nếu bạn đang tắt thiết bị mà bạn có thể chỉ cần chạy lệnh sau:

gói adb shell dumpsys r

Điều này sẽ cung cấp cho bạn danh sách tất cả các bộ lọc nhằm mục đích đăng ký tĩnh.

+0

Thật không may, nó đổ mảng PackageManagerService.mActivities mà không có sẵn bên ngoài. Vì vậy, bạn không thể truy cập bộ lọc ý định thông qua API. – Oleksandr

3

Mở rộng câu trả lời của Tom Fraser, cách tốt nhất là sử dụng dumpsys với grep và sắp xếp.

dumpsys activity broadcasts |grep -iE ".+\.[0-9A-Z_\-]+:$" |sort 

Biểu thức grep đảm bảo chỉ bắt các dòng kết thúc theo ý định như định dạng ...blahblah.SOME_INTENT:. Nó có thể không bắt được tất cả, nhưng đó là một khởi đầu tốt.

+1

Trong trường hợp của tôi (Linux), tôi phải xóa '$' – có thể là do EOL. – pevik

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