android基礎知識----自帶的分享

我一直都在sharesdk分享,沒怎麼用,今天這裏就用下,順便記錄下挺簡單的。
最主要的三種
1. 分享文本

Intent intent1=new Intent(Intent.ACTION_SEND);
                intent1.putExtra(Intent.EXTRA_TEXT,"This is my text to send");
                intent1.setType("text/plain");
                startActivity(Intent.createChooser(intent1,"文本分享"));
  1. 分享單張圖片
Intent intent2=new Intent(Intent.ACTION_SEND);
                Uri uri= Uri.parse(picturePath);
                intent2.setType("image/*");
                intent2.putExtra(Intent.EXTRA_STREAM,uri);
                startActivity(Intent.createChooser(intent2,"單圖片分享"));
  1. 分享多張圖片
 ArrayList<Uri> imageUris = new ArrayList<Uri>();
                Uri imageUri1 = Uri.parse(picturePath);
                Uri imageUri2 = Uri.parse(picturePath);
                imageUris.add(imageUri1);
                imageUris.add(imageUri2);

                Intent intent3 = new Intent();
                intent3.setAction(Intent.ACTION_SEND_MULTIPLE);
                intent3.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
                intent3.setType("image/*");
                startActivity(Intent.createChooser(intent3, "多圖片分享"));

如果你要傳文件的話就設置

   intent4.setType("*/*");

當然我們還可以設置指向qq或者微信分享

QQ

Intent qqIntent = new Intent(Intent.ACTION_SEND);
                qqIntent.setPackage("com.tencent.mobileqq");
                qqIntent.setType("text/plain");
                qqIntent.putExtra(Intent.EXTRA_TEXT, "分享到微信的內容");
                startActivity(qqIntent);

微信

  Intent wechatIntent = new Intent(Intent.ACTION_SEND);
                wechatIntent.setPackage("com.tencent.mm");
                wechatIntent.setType("text/plain");
                wechatIntent.putExtra(Intent.EXTRA_TEXT, "分享到微信的內容");
                startActivity(wechatIntent);

好了,但是這裏有個問題,就是如果你沒有裝微信或者QQ的話,那麼你指向分享會報錯崩潰,這是不被允許的錯誤,所以要加上判斷。

 /**
     *判斷微信是否可用  true可用
     * @param context
     * @return
     */
    public static boolean isWeixinAvilible(Context context) {
        final PackageManager packageManager = context.getPackageManager();// 獲取packagemanager
        List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);// 獲取所有已安裝程序的包信息
        if (pinfo != null) {
            for (int i = 0; i < pinfo.size(); i++) {
                String pn = pinfo.get(i).packageName;
                if (pn.equals("com.tencent.mm")) {
                    return true;
                }
            }
        }
        return false;
    }
    /**
     * 判斷qq是否可用
     *
     * @param context
     * @return
     */
    public static boolean isQQClientAvailable(Context context) {
        final PackageManager packageManager = context.getPackageManager();
        List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);
        if (pinfo != null) {
            for (int i = 0; i < pinfo.size(); i++) {
                String pn = pinfo.get(i).packageName;
                if (pn.equals("com.tencent.mobileqq")) {
                    return true;
                }
            }
        }
        return false;
    }

然後給出我的測試代碼

package com.example.admin.fenxiang;

import android.Manifest;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.annotation.DrawableRes;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

import static android.os.Environment.getExternalStorageDirectory;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private Button btnText;
    private Button btnDan;
    private Button btnDuo;
    private Button btnFile;
    private Button btnQq;
    private Button btnWexin;
    private Button btnTuwen;
    private  final int REQUEST_WRITE=1;//申請權限的請求碼
    private File path;
    private Uri file;//存放圖片的文件名
    String picturePath;//圖片路徑
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
    }
    public void initView(){
        btnText = (Button) findViewById(R.id.btn_text);
        btnDan = (Button) findViewById(R.id.btn_dan);
        btnDuo = (Button) findViewById(R.id.btn_duo);
        btnFile = (Button) findViewById(R.id.btn_file);
        btnQq = (Button) findViewById(R.id.btn_qq);
        btnWexin = (Button) findViewById(R.id.btn_wexin);
        btnTuwen = (Button) findViewById(R.id.btn_tuwen);
        btnText.setOnClickListener(this);
        btnDan.setOnClickListener(this);
        btnDuo.setOnClickListener(this);
        btnFile.setOnClickListener(this);
        btnQq.setOnClickListener(this);
        btnWexin.setOnClickListener(this);
        btnTuwen.setOnClickListener(this);
    }
    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.btn_text:
                Intent intent1=new Intent(Intent.ACTION_SEND);
                intent1.putExtra(Intent.EXTRA_TEXT,"This is my text to send");
                intent1.setType("text/plain");
                startActivity(Intent.createChooser(intent1,"文本分享"));
                break;
            case R.id.btn_dan:
                if (picturePath==null){
                    Toast.makeText(MainActivity.this,"先獲取分享的圖片",Toast.LENGTH_SHORT).show();
                    return;
                }
                Intent intent2=new Intent(Intent.ACTION_SEND);
                Uri uri= Uri.parse(picturePath);
                intent2.setType("image/*");
                intent2.putExtra(Intent.EXTRA_STREAM,uri);
                startActivity(Intent.createChooser(intent2,"單圖片分享"));
                break;
            case R.id.btn_duo:
                if (picturePath==null){
                    Toast.makeText(MainActivity.this,"先獲取分享的圖片",Toast.LENGTH_SHORT).show();
                    return;
                }
                ArrayList<Uri> imageUris = new ArrayList<Uri>();
                Uri imageUri1 = Uri.parse(picturePath);
                Uri imageUri2 = Uri.parse(picturePath);
                imageUris.add(imageUri1);
                imageUris.add(imageUri2);

                Intent intent3 = new Intent();
                intent3.setAction(Intent.ACTION_SEND_MULTIPLE);
                intent3.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
                intent3.setType("image/*");
                startActivity(Intent.createChooser(intent3, "多圖片分享"));
                break;
            case R.id.btn_file:
                applyPermission();
                Intent intent4=new Intent(Intent.ACTION_SEND);
                Uri uri4= Uri.parse(path.getAbsolutePath());//  Uri u = Uri.fromFile(f);
                intent4.putExtra(Intent.EXTRA_STREAM,uri4);
                intent4.setType("*/*");
                startActivity(Intent.createChooser(intent4,"單文件分享"));
                break;
            case R.id.btn_qq:
                if (isQQClientAvailable(MainActivity.this)){
                    Intent qqIntent = new Intent(Intent.ACTION_SEND);
                    qqIntent.setPackage("com.tencent.mobileqq");
                    qqIntent.setType("text/plain");
                    qqIntent.putExtra(Intent.EXTRA_TEXT, "分享到QQ的內容");
                    startActivity(qqIntent);
                }else {
                    Toast.makeText(MainActivity.this,"手機沒有安裝QQ",Toast.LENGTH_SHORT).show();
                }


                break;
            case R.id.btn_wexin:
                if (isWeixinAvilible(MainActivity.this)){
                    Intent wechatIntent = new Intent(Intent.ACTION_SEND);
                    wechatIntent.setPackage("com.tencent.mm");
                    wechatIntent.setType("text/plain");
                    wechatIntent.putExtra(Intent.EXTRA_TEXT, "分享到微信的內容");
                    startActivity(wechatIntent);
                }else {
                    Toast.makeText(MainActivity.this,"手機沒有安裝微信",Toast.LENGTH_SHORT).show();
                }

                break;
            case R.id.btn_tuwen:

                Intent intent = new Intent(Intent.ACTION_PICK, null);
                intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                        "image/*");
                startActivityForResult(intent, 1001);
                break;
        }
    }

    /**
     * res中的圖片轉變爲uri
     * @param id
     * @return
     */
    private String getResourcesUri(@DrawableRes int id) {
        Resources resources = getResources();
        String uriPath = ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
                resources.getResourcePackageName(id) + "/" +
                resources.getResourceTypeName(id) + "/" +
                resources.getResourceEntryName(id);
        Toast.makeText(this, "Uri:" + uriPath, Toast.LENGTH_SHORT).show();
        return uriPath;
    }
    //寫數據
    public void writeToSdCard(){
        //1、判斷sd卡是否可用
        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
            //sd卡可用
            //2、獲取sd卡路徑
            File sdFile= getExternalStorageDirectory();
            path=new File(sdFile,"a.txt");//sd卡下面的a.txt文件  參數 前面 是目錄 後面是文件
            try {
                FileOutputStream fileOutputStream=new FileOutputStream(path);
                fileOutputStream.write("我要SSR".getBytes());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    /*
    考慮android6.0的權限問題
     */
    public void applyPermission(){
        //判斷是否6.0以上的手機   不是就不用
        if(Build.VERSION.SDK_INT>=23){
            //判斷是否有這個權限
            if(ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
                    //2、申請權限: 參數二:權限的數組;參數三:請求碼
                    ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_WRITE);
            }else {
                writeToSdCard();
            }
        } else{
            writeToSdCard();
        }
    }

    //判斷授權的方法  授權成功直接調用寫入方法  這是監聽的回調
    //參數  上下文   授權結果的數組   申請授權的數組
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if(requestCode==REQUEST_WRITE&&grantResults[0]== PackageManager.PERMISSION_GRANTED){
            writeToSdCard();
        }

    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
//
        if (resultCode==RESULT_OK){
            switch (requestCode) {
                case 1001:
                    //相冊選擇
                    if (data != null) {
                        String[] filePathColumn = { MediaStore.Images.Media.DATA };

                        Cursor cursor = getContentResolver().query(data.getData(),
                                filePathColumn, null, null, null);
                        cursor.moveToFirst();

                        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                        picturePath = cursor.getString(columnIndex);
                        cursor.close();
                        Log.e("====",picturePath);
                    }
                    break;

            }
        }
    }

    /**
     *判斷微信是否可用  true可用
     * @param context
     * @return
     */
    public static boolean isWeixinAvilible(Context context) {
        final PackageManager packageManager = context.getPackageManager();// 獲取packagemanager
        List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);// 獲取所有已安裝程序的包信息
        if (pinfo != null) {
            for (int i = 0; i < pinfo.size(); i++) {
                String pn = pinfo.get(i).packageName;
                if (pn.equals("com.tencent.mm")) {
                    return true;
                }
            }
        }
        return false;
    }
    /**
     * 判斷qq是否可用
     *
     * @param context
     * @return
     */
    public static boolean isQQClientAvailable(Context context) {
        final PackageManager packageManager = context.getPackageManager();
        List<PackageInfo> pinfo = packageManager.getInstalledPackages(0);
        if (pinfo != null) {
            for (int i = 0; i < pinfo.size(); i++) {
                String pn = pinfo.get(i).packageName;
                if (pn.equals("com.tencent.mobileqq")) {
                    return true;
                }
            }
        }
        return false;
    }

}

好了,到此爲止。。。。。祝大家五一快樂。

發佈了116 篇原創文章 · 獲贊 30 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章