2013-07-22 40 views
7

我不想在我的應用程序中有一個操作欄,但仍然想要操作欄提供的那個共享按鈕。ShareActionProvider在android中沒有任何操作欄

這是在操作欄在那裏時完成的。

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; 
} 

而menu.xml保存在菜單文件夾中。

在哪裏,因爲我想我自己在我的XML一個分享按鈕,而其他的佈局也被定義。

有幫助嗎?

+2

'ShareActionProvider'不會沒有'ActionBar'工作。但是你應該通過查看它的[實現]來獲得一些想法(https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/widget/ShareActionProvider.java) – zapl

回答

5

使用PackageManagerqueryIntentActivities()可以找到知道如何處理要調用的ACTION_SENDIntent的應用程序。顯示你想要的結果列表。當用戶進行選擇,創建一個相當於ACTION_SENDIntent,在這裏您可以指定用戶選擇的特定活動的ComponentName,並調用startActivity()

+0

你能幫我解決這個問題嗎?如果組件名稱不知道呢? 或鏈接到任何文章將會有所幫助。 – user2607444

+0

@ user2607444:「如果組件名稱不知道,那麼?」 - 是的,他們是,因爲這是我答案前兩句話背後的一點。例如,下面是一個執行類似操作的「啓動器」,但對於'ACTION_MAIN' /'CATEGORY_HOME':https://github.com/commonsguy/cw-omnibus/tree/master/Introspection/Launchalot – CommonsWare

1

對ACTION_SEND使用意圖。例如,點擊按鈕時,您可以:

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

謝謝Andrew:我正在使用手機(它不是我的,也不是一個「足夠聰明」的手機:-)來正確編寫代碼) –

7

您不需要操作欄來共享內容。事實上,即使使用Action Bar,大多數應用程序也不會使用ShareActionProvider,因爲視覺設計師討厭它,並且不支持用戶設備上的許多最新共享功能(如直接共享聯繫人)。相反,您應該使用Intent.createChooser來創建更強大的共享對話框。

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

一個更好的方法在您的應用程序的任何地方分享的是使用ShareCompat。下面是一個簡單的例子:

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

其他例子可以在這裏找到:https://android.googlesource.com/platform/development/+/master/samples/Support4Demos/src/com/example/android/supportv4/app/SharingSupport.java

相關問題