2012-06-06 32 views
29

Tôi đang tìm cách bắt đầu một hoạt động trong ứng dụng của mình bằng cách sử dụng một hành động tùy chỉnh. Tôi đã tìm thấy một vài câu trả lời nhưng mọi thứ tôi thử sẽ ném ra java.lang.RuntimeException cho biết Không tìm thấy Hoạt động nào để xử lý Intent {act = com.example.foo.bar.YOUR_ACTION}.Bắt đầu hoạt động bằng cách sử dụng tác vụ tùy chỉnh

Đây là hoạt động trong file manifest của tôi:

<activity 
    android:name=".FeedbackActivity" > 
    <intent-filter> 
     <action android:name="com.example.foo.bar.YOUR_ACTION" /> 
    </intent-filter> 
</activity> 

Và đây là cách tôi bắt đầu hoạt động:

Intent intent = new Intent("com.example.foo.bar.YOUR_ACTION"); 
startActivity(intent); 

Bất kỳ trợ giúp sẽ được đánh giá rất nhiều.

+0

đăng bản kê khai của bạn – FoamyGuy

+0

Tôi nghĩ bạn nên đánh dấu câu trả lời của Maks là câu trả lời đúng (để tham khảo cho người dùng khác) – Kzar

+0

Thực tế, đánh dấu câu trả lời là chấp nhận nghĩa là nó hoạt động cho OP, không nhất thiết rằng đó là câu trả lời tốt nhất cho mọi người - đó là những gì upvotes là cho. – Cullub

Trả lời

22

Tôi nghĩ bạn đang tạo ra ý định của mình sai. Hãy thử như thế này:

String CUSTOM_ACTION = "com.example.foo.bar.YOUR_ACTION"; 

//Intent i = new Intent(this, FeedBackActivity.class); // <--- You might need to do it this way. 
Intent i = new Intent(); 
i.setAction(CUSTOM_ACTION); 

startActivity(i); 
+0

Tôi không nhận được ngoại lệ nữa tuy nhiên nó chỉ hiển thị một màn hình để người dùng chọn một ứng dụng để hoàn thành hành động. –

+0

là ứng dụng của bạn trong danh sách? – FoamyGuy

+0

'listIntent' trong mã của bạn là gì? Bạn có nghĩa là 'i'? – Karu

80

Tôi nghĩ rằng những gì bạn cần là thêm một loại mặc định cho mục đích lọc của bạn, ví dụ như .

<activity 
    android:name=".FeedbackActivity" > 
    <intent-filter> 
     <action android:name="com.example.foo.bar.YOUR_ACTION" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 

xem this answer để biết thêm thông tin.

+3

Đây là câu trả lời chính xác và cần được đánh dấu như vậy. – David

+0

Có! Cảm ơn bạn đời :) – yahya

1

Chỉ thêm danh mục lọc và ý định làm Mặc định.

Intplicit intent hoạt động hoàn hảo và trong nhiều trường hợp, tốt hơn nên sử dụng mục đích ngầm định với Intent-action để gọi một dịch vụ/Activity hơn là sử dụng tên lớp.

Trước startActivty()/startService() với ngữ cảnh thích hợp, bạn sử dụng phương pháp này 'queryIntentActivities(Intent intent, int flags)' từ lớp trình quản lý gói.

Nó giúp Trình quản lý hoạt động (chịu trách nhiệm khởi chạy hoạt động) để kiểm tra xem hệ thống Android có nhận được bất kỳ kết quả nào phù hợp với bạn hay không.

Nếu nó không trả về một danh sách kích thước 0 hoặc khác> 0. Bằng cách này, bạn cũng có thể kiểm tra xem ứng dụng của bạn có nhận được cuộc gọi hay không và trong trường hợp này ngay cả khi ứng dụng của bạn chưa được cài đặt/gặp sự cố, ứng dụng sẽ không gặp sự cố nhưng sẽ cảnh báo trong Nhật ký. Người dùng sẽ không gặp phải rắc rối lớn ngoài ứng dụng không được khởi chạy.

(người dùng sẽ không bao giờ tha thứ cho bạn nếu ứng dụng du lịch gặp sự cố).

Hy vọng điều này sẽ hữu ích !!! Mã hóa hạnh phúc. :)

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