从零开始水安卓——APP内容共享

在ActionBar一文中已经略有涉及该部分内容,实际上已经算是一个比较完整的小Demo了

https://blog.csdn.net/nishigesb123/article/details/89082008


发送文本内容

准备一个Button

   

对应点击事件 

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

从零开始水安卓——APP内容共享_第1张图片从零开始水安卓——APP内容共享_第2张图片

指定选择器

还可以设置一个指定选择器

从零开始水安卓——APP内容共享_第3张图片

可以看到,与之前还是有一定的区别的。

从零开始水安卓——APP内容共享_第4张图片


发送二进制内容

可以通过发送二进制内容实现图片分享。

 
    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 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)

修改其配置清单文件

        
            
                
                
                
            
        

布局中添加一个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内容共享_第5张图片我们选择分享简单文本,从零开始水安卓——APP内容共享_第6张图片可以发现已经可以指定当前app来接收了

点击效果如下:

从零开始水安卓——APP内容共享_第7张图片

ShareActionProvider

可以通过ShareActionProvider把分享操作附加到个一个菜单项上,API级别需要大于14。

需要一个Menu,并为其添加Item




    
    

完整代码:实际上只完成重写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 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,"分享多个内容"));
    }

}

 

从零开始水安卓——APP内容共享_第8张图片从零开始水安卓——APP内容共享_第9张图片

你可能感兴趣的:(安卓开发)