2014-07-03 14 views
5

Tôi đang cố gắng chụp kết quả của Intent.createChooser để biết ứng dụng nào mà người dùng đã chọn để chia sẻ.Nhận ứng dụng được chọn từ Intent.createChooser

Tôi biết đã có rất nhiều bài viết liên quan đến điều này:

nhưng những bài viết có phần cũ, và Tôi hy vọng rằng có thể có một số phát triển mới.

Tôi đang cố gắng triển khai share action mà không cần có mặt trong trình đơn. Giải pháp gần nhất với những gì tôi muốn được cung cấp bởi ClickClickClack, người đề xuất triển khai trình chọn ứng dụng tùy chỉnh, nhưng điều đó có vẻ nặng nề. Ngoài ra, có vẻ như có thể có một số móc Android để tải ứng dụng đã chọn, như là ActivityChooserModel.OnChooseActivityListener.

Tôi có mã sau trong MainActivity của mình, nhưng phương thức onShareTargetSelected không bao giờ được gọi.

Intent sendIntent = new Intent(); 
    sendIntent.setAction(Intent.ACTION_SEND); 
    sendIntent.putExtra(Intent.EXTRA_TEXT, shareMessage()); 
    sendIntent.setType("text/plain"); 

    Intent intent = Intent.createChooser(sendIntent, getResources().getText(R.string.share_prompt)); 

    ShareActionProvider sap = new ShareActionProvider(this); 
    sap.setShareIntent(sendIntent); 
    sap.setOnShareTargetSelectedListener(new ShareActionProvider.OnShareTargetSelectedListener() { 
     @Override 
     public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) { 
      System.out.println("Success!!"); 
      return false; 
     } 
    }); 

    startActivityForResult(intent, 1); 

Trả lời

2

Tôi cố gắng để nắm bắt được kết quả của Intent.createChooser biết ứng dụng nào người dùng chọn để chia sẻ.

Điều đó là không thể.

Các giải pháp "chọn" khác, như ShareActionProvider, có thể cung cấp nhiều hơn. Tôi chưa kiểm tra số Intent được giao cho onShareTargetSelected() để xem liệu nó có chứa ComponentName của mục tiêu đã chọn hay không, mặc dù các tài liệu đề xuất rằng nó nên.

Và, nếu vì một lý do nào đó không, bạn có thể thử ngã ba ShareActionProvider để thêm các móc bạn muốn.

Lý do tại sao createChooser() không thể được xử lý theo cách này đơn giản chỉ vì "lựa chọn" đang được thực hiện bởi một quá trình riêng biệt từ bạn.

Tôi có mã sau trong MainActivity của mình, nhưng phương pháp onShareTargetSelected không bao giờ được gọi.

ShareActionProvider đi vào thanh tác vụ. Bạn không thể chỉ tạo một thể hiện, gọi một vài người định cư và mong đợi một điều gì đó xảy ra.

+0

Được rồi. Thật đáng thất vọng khi nghe và không rõ ràng từ các tài liệu trong ShareActionProvider. – dsg

+0

Tôi đã kết thúc chỉ với giải pháp này: http://stackoverflow.com/a/18980872/244526 – dsg

10

Theo cấp API 22, giờ đây thực tế là có thể. Trong Android 5.1, một phương thức (createChooser (Intent target, CharSequence title, IntentSender sender)) đã được thêm vào cho phép nhận kết quả lựa chọn của người dùng. Khi bạn cung cấp một số IntentSender đến createChooser, người gửi sẽ được thông báo bằng hộp thoại trình chọn với số người dùng được chọn là ComponentName. Nó sẽ được cung cấp trong tên có thêm EXTRA_CHOSEN_COMPONENT int IntentSendernotified.

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