动作提供者是一个动作,能定义自己的外观和行为,下面是为应用条增加一个动作提供者。
共享动作提供者允许用户与其他应用共享应用中的内容。可以使用动作提供者让用户向他们某个联系人发送一个特色披萨的详细信息。
共享动作提供者会定义自己的图标,所以无需自行添加,单击这个图标时,会提供一个应用列表,可以使用所列的这些应用共享内容。对于你选择用来共享内容的最常用的应用,还会增加一个单独的图标。
用意图共享内容
要让共享动作提供者共享内容,需要为它传递一个意图,这个意图要定义你想要的共享的内容及其类型。例如,如果定义一个意图用ACTION_SEND动作传递文本,这个共享动作提供你的设备上能共享文本的所有应用的一个列表。
为menu_main.xml增加一个共享动作提供者
在strings.xml中增加一一个action_share字符串:
<string name="action_share">Share</string>
使用item元素在菜单资源文件中增加共享动作,这次需要指定在使用一个共享动作提供者。为此,要增加一个android:actionProviderClass属性。
<itemandroid:id="@+id/action_share"android:title="@string/action_share"android:orderInCategory="2"app:showAsAction="ifRoom"app:actionProviderClass="androidx.appcompat.widget.ShareActionProvider"/>
用意图指定内容
单击共享动作时,要想让它共享动作,需要在活动代码中告诉它要共享那些内容。
private ShareActionProvider shareActionProvider;private void setShareActionIntent(String text) {//创建一个意图使用共享动作提供者的setShareIntent()方法来传递这个意图Intent intent = new Intent(Intent.ACTION_SEND);intent.setType("text/plain");intent.putExtra(Intent.EXTRA_TEXT, text);shareActionProvider.setShareIntent(intent);}@Override//将菜单资源文件增加到应用条
public boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.menu_main, menu);//得到共享动作提供者的一个引用,并赋给这个私有变量。然后调用setShareActionIntent这个方法MenuItem menuItem = menu.findItem(R.id.action_share);shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem);setShareActionIntent("Want to join me for pizza?");//所有onCreateOptionsMenu方法基本上都是这样的return super.onCreateOptionsMenu(menu);
}
完整的MainActivity的java代码:
package com.hfad.bitsandpizzas;import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.ShareActionProvider;
import androidx.appcompat.widget.Toolbar;
import androidx.core.view.MenuItemCompat;import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;public class MainActivity extends AppCompatActivity {//增加一个ShareActionProvider私有变量private ShareActionProvider shareActionProvider;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//设置工具条为活动的应用条Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);setSupportActionBar(toolbar);}private void setShareActionIntent(String text) {//创建一个意图使用共享动作提供者的setShareIntent()方法来传递这个意图Intent intent = new Intent(Intent.ACTION_SEND);intent.setType("text/plain");intent.putExtra(Intent.EXTRA_TEXT, text);shareActionProvider.setShareIntent(intent);}@Override//将菜单资源文件增加到应用条public boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.menu_main, menu);//得到共享动作提供者的一个引用,并赋给这个私有变量。然后调用setShareActionIntent这个方法MenuItem menuItem = menu.findItem(R.id.action_share);shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem);setShareActionIntent("Want to join me for pizza?");//所有onCreateOptionsMenu方法基本上都是这样的return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case R.id.action_create_order:Intent intent = new Intent(this, OrderActivity.class);startActivity(intent);return true;default:return super.onOptionsItemSelected(item);}}
}