在ActionBar一文中已经略有涉及该部分内容,实际上已经算是一个比较完整的小Demo了
https://blog.csdn.net/nishigesb123/article/details/89082008
发送文本内容
准备一个Button
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/simpletext"
android:onClick="simpletext"
android:text="分享简单文本"
app:layout_constraintTop_toTopOf="parent"/>
对应点击事件
package com.example.a4_8share;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void simpletext(View v){
Intent intent=new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT,"分享一个简单文本");
startActivity(intent);
}
}
指定选择器
还可以设置一个指定选择器
可以看到,与之前还是有一定的区别的。
发送二进制内容
可以通过发送二进制内容实现图片分享。
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/photo"
android:onClick="photo"
android:text="分享图片"
app:layout_constraintTop_toBottomOf="@id/simpletext"/>
public void photo(View v){
Intent intent=new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("image/*");
//uri即图片路径
Uri uri=Uri.parse("/storage/emulated/0/Download/timg%20(1).jpg");
intent.putExtra(Intent.EXTRA_STREAM,uri);
startActivity(intent.createChooser(intent,"分享图片"));
}
发送多件内容
类似的,就不多做演示,参考代码如下:
public void multiple(View view){
Uri uri1=Uri.parse("路径1");
Uri uri2=Uri.parse("路径2");
ArrayList<Uri> list=new ArrayList<>();
list.add(uri1);
list.add(uri2);
Intent intent=new Intent();
intent.setAction(Intent.ACTION_SEND_MULTIPLE);
intent.setType("image/*");
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,list);
startActivity(intent.createChooser(intent,"分享多个内容"));
}
从其他应用程序接受简单的数据
创建一个新的Activity(Receiver)
修改其配置清单文件
<activity android:name=".Receiver">
<intent-filter>
<action android:name="android.intent.action.SEND"></action>
<category android:name="android.intent.category.DEFAULT"></category>
<data android:mimeType="text/plain"></data>
</intent-filter>
</activity>
布局中添加一个Textview用于接收文本,细节不表,下面是代码部分(处理接收到的内容放在TextView里)
package com.example.a4_8share;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class Receiver extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_receiver);
textView = findViewById(R.id.receiver);
handlerContent();
}
//处理内容
public void handlerContent() {
Intent intent = getIntent();
String type = intent.getType();
String action = intent.getAction();
if (Intent.ACTION_SEND.equals(action)) {
//判断是否是文本,如果是才选择这种处理方式
if ("text/plain".equals(type)) {
String info = intent.getStringExtra(Intent.EXTRA_TEXT);
System.out.println(info);
textView.setText(info);
}
}
}
}
我们选择分享简单文本,
可以发现已经可以指定当前app来接收了
点击效果如下:
ShareActionProvider
可以通过ShareActionProvider把分享操作附加到个一个菜单项上,API级别需要大于14。
需要一个Menu,并为其添加Item
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/share"
android:title="share"
android:orderInCategory="200"
app:showAsAction="ifRoom"
app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
android:icon="@android:drawable/ic_menu_share">
</item>
</menu>
完整代码:实际上只完成重写onCreateOptionsMenu
package com.example.a4_8share;
import android.content.Intent;
import android.net.Uri;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.ShareActionProvider;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu,menu);
MenuItem item = menu.findItem(R.id.share);
ShareActionProvider sap = (ShareActionProvider) MenuItemCompat.getActionProvider(item);
Intent intent=new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT,"ShareActionProvider");
sap.setShareIntent(intent);
return true;
}
public void simpletext(View v){
Intent intent=new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT,"分享一个简单文本");
//startActivity(intent);
startActivity(intent.createChooser(intent,"设置了一枚指定选择器"));
}
public void photo(View v){
Intent intent=new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("image/*");
//uri即图片路径
Uri uri=Uri.parse("/storage/Pictures/CoolMarket/111.jpg");
intent.putExtra(Intent.EXTRA_STREAM,uri);
startActivity(intent.createChooser(intent,"分享图片"));
}
public void multiple(View view){
Uri uri1=Uri.parse("/storage/Pictures/CoolMarket/111.jpg");
Uri uri2=Uri.parse("/storage/Pictures/CoolMarket/111.jpg");
ArrayList<Uri> list=new ArrayList<>();
list.add(uri1);
list.add(uri2);
Intent intent=new Intent();
intent.setAction(Intent.ACTION_SEND_MULTIPLE);
intent.setType("image/*");
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,list);
startActivity(intent.createChooser(intent,"分享多个内容"));
}
}