2013-07-22 18 views
7

Tôi không muốn thanh tác vụ trong ứng dụng của mình và vẫn muốn có nút chia sẻ được cung cấp bởi thanh tác vụ.ShareActionProvider không có bất kỳ thanh tác vụ nào trong android

Việc này được thực hiện khi có thanh tác vụ.

public boolean onCreateOptionsMenu(Menu menu) { 

    getMenuInflater().inflate(R.menu.main, menu); 
    ShareActionProvider provider = (ShareActionProvider) 
    menu.findItem(R.id.menu_share).getActionProvider(); 

    if (provider != null) { 
     Intent shareIntent = new Intent(); 
     shareIntent.setAction(Intent.ACTION_SEND); 
     shareIntent.putExtra(Intent.EXTRA_TEXT, "hi"); 
     shareIntent.setType("text/plain"); 
     provider.setShareIntent(shareIntent); 
    } 

    return true; 
} 

Và menu.xml được lưu trong thư mục trình đơn.

Trong trường hợp tôi muốn có nút chia sẻ của riêng mình trong xml của tôi, nơi bố cục khác cũng được xác định.

trợ giúp nào?

+2

'ShareActionProvider' sẽ không hoạt động mà không cần' ActionBar'. Nhưng bạn nên có một số ý tưởng bằng cách xem [triển khai] đó (https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/widget/ShareActionProvider.java) – zapl

Trả lời

5

Sử dụng PackageManagerqueryIntentActivities() để tìm ứng dụng biết cách xử lý ACTION_SENDIntent mà bạn muốn gọi. Hiển thị danh sách kết quả theo ý bạn muốn. Khi người dùng thực hiện lựa chọn, hãy tạo một số tương đương ACTION_SENDIntent, trong đó bạn chỉ định ComponentName hoạt động cụ thể mà người dùng đã chọn và gọi startActivity().

+0

Bạn có thể giúp tôi nhiều hơn với điều này không? Như trong nếu các tên thành phần không được biết thì? Hoặc liên kết đến bất kỳ bài viết nào sẽ hữu ích. – user2607444

+0

@ user2607444: "Như thể các tên thành phần chưa được biết đến?" - vâng, họ, vì đó là điểm đằng sau hai câu đầu tiên của câu trả lời của tôi. Ví dụ: đây là "trình khởi chạy" thực hiện thao tác tương tự, nhưng đối với 'ACTION_MAIN' /' CATEGORY_HOME': https://github.com/commonsguy/cw-omnibus/tree/master/Introspection/Launchalot – CommonsWare

1

Sử dụng Mục đích với ACTION_SEND. Ví dụ: khi một nút được nhấp, bạn có thể:

Intent It = new Intent(Intent.ACTION_SEND); 
It.setType("text/plain"); 
It.putExtra(android.content.Intent.EXTRA_TEXT,"your_text_to_share"); 
YourActivity.this.startActivity(It); 
+0

cảm ơn Andrew: tôi đã sử dụng một chiếc điện thoại di động (nó không phải của tôi và nó cũng không phải là một điện thoại "đủ thông minh" :-) để viết mã một cách chính xác) –

7

Bạn không cần thanh tác vụ để chia sẻ nội dung. Thực tế, ngay cả với Thanh tác vụ, hầu hết các ứng dụng đều không sử dụng ShareActionProvider vì nhà thiết kế trực quan ghét nó và nó không hỗ trợ nhiều tính năng chia sẻ mới nhất trên thiết bị của người dùng (như chia sẻ trực tiếp với người liên hệ). Thay vào đó, bạn nên sử dụng Intent.createChooser để tạo hộp thoại chia sẻ mạnh mẽ hơn.

Intent sendIntent = new Intent(); 
sendIntent.setAction(Intent.ACTION_SEND); 
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send."); 
sendIntent.setType("text/plain"); 
startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_to))); 

http://developer.android.com/training/sharing/send.html

Một cách tốt hơn để chia sẻ từ bất cứ nơi nào trong ứng dụng của bạn là sử dụng ShareCompat. Dưới đây là một ví dụ nhanh:

ShareCompat.IntentBuilder.from(this) 
      .setType("text/plain") 
      .setText("I'm sharing!") 
      .startChooser(); 

ví dụ khác có thể được tìm thấy ở đây: https://android.googlesource.com/platform/development/+/master/samples/Support4Demos/src/com/example/android/supportv4/app/SharingSupport.java