栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

android 多文件分享

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

android 多文件分享

MimeTypes.java

package ******;

import android.net.Uri;
import android.content.ContentResolver;
import java.util.Arrays;
import java.util.Set;
import java.util.List;

public final class MimeTypes {

    private MimeTypes() {}


    public static String[] splitMimeType(String mimeType) {
        final String[] groups = mimeType.split("/");

        if (groups.length != 2 || groups[0].isEmpty() || groups[1].isEmpty()) {
            return null;
        }

        return groups;
    }

    public static String findCommonMimeType(List mimeTypes) {
        String[] commonType = splitMimeType(mimeTypes.get(0));
        if (commonType == null) {
            return "*
    public boolean hasPendingScans() {
        synchronized (mConnection) {
            if (mPending.isEmpty()) {
                return false;
            } else {
                // Check if pending scans have timed out
                final long nowRealtime = SystemClock.elapsedRealtime();
                for (ScanRequest req : mPending.values()) {
                    if (nowRealtime < req.requestRealtime + SCAN_TIMEOUT) {
                        return true;
                    }
                }
                return false;
            }
        }
    }

    
    public void requestScan(ScanRequest req) {
        Log.v(TAG, "requestScan() for " + req.path);
        synchronized (mConnection) {
            mPending.put(req.path, req);

            if (mConnection.isConnected()) {
                req.exec(mConnection);
            } else {
                mConnection.connect();
            }
        }
    }

    public void shutdown() {
        mConnection.disconnect();
    }

    @Override
    public void onMediaScannerConnected() {
        synchronized (mConnection) {
            for (ScanRequest req : mPending.values()) {
                req.exec(mConnection);
            }
        }
    }

    @Override
    public void onScanCompleted(String path, Uri uri) {
        final ScanRequest req;
        synchronized (mConnection) {
            req = mPending.remove(path);
        }
        if (req == null) {
            Log.w(TAG, "Missing request for path " + path);
            return;
        }

        // File got deleted while waiting for it to be mediascanned.
        if (uri == null) {
            if (mLatch != null) {
                mLatch.countDown();
            }
            return;
        }

        if (mLatch != null) {
            mLatch.countDown();
        }
        Log.v(TAG, "onScanCompleted path " + path + " uri:" + uri);
        documentInfo item = new documentInfo();
        ContentResolver cr = mContext.getContentResolver();
        item.setDerivedUri(uri);
        item.setMimeType(cr.getType(uri));
        ShareManager.getInstance(mContext).addDoc(item);
    }
}

documentInfo.java

package ******;

import android.net.Uri;

public class documentInfo  {
    private static final String TAG = "documentInfo";

    public Uri derivedUri;
    public String mimeType;

    public documentInfo() {
    }

    public documentInfo(Uri derivedUri, String mimeType) {
        this.derivedUri = derivedUri;
        this.mimeType = mimeType;
    }

    public Uri getDerivedUri() {
        return derivedUri;
    }

    public void setDerivedUri(Uri derivedUri) {
        this.derivedUri = derivedUri;
    }

    public String getMimeType() {
        return mimeType;
    }

    public void setMimeType(String mimeType) {
        this.mimeType = mimeType;
    }

}

ShareManager.java

public class ShareManager {

    private static String TAG = "share";
    private static ShareManager instance;
    private Context mContext;
    List mDocs = new ArrayList();

    private ShareManager(Context context) {
        mContext = context;
    }

    public void addDoc(documentInfo doc) {
        mDocs.add(doc);
        Log.d(TAG, "addDoc doc:" + doc);
        if (mDocs.size() == mFileNum) {
            startShareApp(mDocs);
        }
    }

    public static ShareManager getInstance(Context context) {
        if (instance == null) {
            instance = new ShareManager(context);
        }
        return instance;
    }

    public void shareFiles(ArrayList filePaths) {
        if (filePaths != null) {
            final int N = filePaths.size();
            mFileNum = N;
            for (int i = 0; i < N; i++) {
                String filePath = filePaths.get(i);
                DownloadScanner.requestScanBlocking(mContext, filePath, "");             
            }
        }
    }

    public void startShareApp(List docs) {
        StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
        StrictMode.setVmPolicy(builder.build());
        builder.detectFileUriExposure();
        Intent intent;
        if (docs.size() == 1) {
            intent = new Intent(Intent.ACTION_SEND);
            documentInfo doc = docs.get(0);
            intent.setType(doc.mimeType);
            intent.putExtra(Intent.EXTRA_STREAM, doc.derivedUri);
        } else if (docs.size() > 1) {
            intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
            final ArrayList mimeTypes = new ArrayList<>();
            final ArrayList uris = new ArrayList<>();
            for (documentInfo doc : docs) {
                mimeTypes.add(doc.mimeType);
                uris.add(doc.derivedUri);
            }
            intent.setType(MimeTypes.findCommonMimeType(mimeTypes));
            intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
        } else {
            mFileNum = 0;
            mDocs.clear();
            return;
        }

        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        intent.addCategory(Intent.CATEGORY_DEFAULT);
        Intent chooserIntent = Intent.createChooser(
                intent, "").addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        mContext.startActivity(chooserIntent);
        mFileNum = 0;
        mDocs.clear();
    }

}

使用方法

**ShareManager.getInstance(context).shareFiles(filePaths,);**
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/677711.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号