2010-08-19 26 views
7

Tôi đang làm việc trên một ứng dụng và tôi muốn tích hợp ứng dụng Last.fm vào ứng dụng đó. Về cơ bản, khi ai đó đang xem một nghệ sĩ trong ứng dụng của tôi, tôi muốn có một nút mà họ có thể nhấn để mở ứng dụng Last.fm với thông tin của nghệ sĩ.Android: Bắt đầu một hoạt động cho một ứng dụng bên thứ ba khác nhau

này ý định công trình, nhưng nó tải một đơn chào bán mà ứng dụng Tôi muốn sử dụng (trình duyệt hoặc Last.fm):

Intent i = new Intent(); 
i.setData(Uri.parse("http://last.fm/music/" + headliner)); 
i.setAction("android.intent.action.VIEW"); 
startActivity(i); 

Tuy nhiên, tôi chỉ muốn bắt đầu ứng dụng Last.fm và bỏ qua hộp thoại hỏi mà ứng dụng sử dụng, tôi nghĩ có lẽ bằng cách sử dụng phương pháp setPackage() sẽ làm việc như thế này:

i.setPackage("fm.last.android"); 

Nhưng nó gây ra các ứng dụng để sụp đổ:

android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=http://last.fm/music/Rihanna pkg=fm.last.android } 

Có thể bắt đầu ứng dụng Last.fm không? Here's một bản sao của tệp AndroidManifest.xml của Last.fm để tham khảo.

Cảm ơn bạn đã đọc, Tony

Trả lời

13

Vâng, nó có thể nhưng bạn cần phải biết tên thành phần chính xác. Khởi chạy ứng dụng last.fm thường xuyên và kiểm tra logfile cho thông tin cmp = ... đã được sử dụng khi ứng dụng được khởi động. Sử dụng điều này cũng như trong ứng dụng của bạn sau đó.

tôi bắt đầu ứng dụng Z-DeviceTest khỏi thị trường từ bên trong ứng dụng của tôi không có vấn đề như thế này:

final Intent intentDeviceTest = new Intent("android.intent.action.MAIN");     
intentDeviceTest.setComponent(new ComponentName("zausan.zdevicetest","zausan.zdevicetest.zdevicetest")); 
startActivity(intentDeviceTest); 

trong trường hợp của tôi các thông tin tôi mất từ ​​logcat là:

// dat = Nội dung: //applications/applications/zausan.zdevicetest/zausan.zdevicetest.zdevicetest

// CMP = zausan.zdevicetest/.zdevicetest

để biết làm thế nào để bắt đầu ứng dụng với các thành phần/lớp đúng ... làm tương tự cho các ứng dụng last.fm

Edit: Tôi đã thử nghiệm để khởi động Last.fm từ của tôi ứng dụng của riêng bạn và điều này hoạt động tốt mà không có bất kỳ lỗi nào:

final Intent intentDeviceTest = new Intent("android.intent.action.MAIN");     
intentDeviceTest.setComponent(new ComponentName("fm.last.android","fm.last.android.LastFm")); 
startActivity(intentDeviceTest); 
+0

Đây là một hack và không được coi là cách thích hợp để gọi các ứng dụng. Thiis một cách chắc chắn để đảm bảo tất cả các loại lỗi sẽ hiển thị – Falmarri

+0

bạn có thể giải thích tại sao đây là một hack? bạn đang sử dụng Intent thông thường của ứng dụng được Trình khởi chạy ứng dụng gọi, tức là khi bạn nhấp vào biểu tượng ứng dụng trên màn hình chính? Dù sao, vậy thì cách thích hợp nhất mà bạn muốn gợi ý là gì? –

+0

Có lẽ tôi đã hiểu lầm. Nếu bạn đang gọi các hoạt động mà các phóng kêu gọi, sau đó tôi đoán rằng nên được tốt. Tôi hiểu câu hỏi khi gọi một hoạt động NỘI BỘ của một gói khác. Điều này là dễ bị phá vỡ bởi vì hoạt động đó có thể yêu cầu bổ sung ý định có thể gây ra một vụ tai nạn, hoặc một cái gì đó như thế. Nếu không nhìn thấy mã, nó không thể nói nếu nó an toàn 100% – Falmarri

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