在应用条上共享内容

动作提供者是一个动作,能定义自己的外观和行为,下面是为应用条增加一个动作提供者。
共享动作提供者允许用户与其他应用共享应用中的内容。可以使用动作提供者让用户向他们某个联系人发送一个特色披萨的详细信息。
共享动作提供者会定义自己的图标,所以无需自行添加,单击这个图标时,会提供一个应用列表,可以使用所列的这些应用共享内容。对于你选择用来共享内容的最常用的应用,还会增加一个单独的图标。

用意图共享内容
要让共享动作提供者共享内容,需要为它传递一个意图,这个意图要定义你想要的共享的内容及其类型。例如,如果定义一个意图用ACTION_SEND动作传递文本,这个共享动作提供你的设备上能共享文本的所有应用的一个列表。

为menu_main.xml增加一个共享动作提供者
在strings.xml中增加一一个action_share字符串:

<string name="action_share">Share</string>

使用item元素在菜单资源文件中增加共享动作,这次需要指定在使用一个共享动作提供者。为此,要增加一个android:actionProviderClass属性。

    <item
        android: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;

    @Override
    protected 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);
    }

    @Override
    public 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);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值