いくつかの問題Androidx FileProviderはQQUriの下で解決しました

 

1 Androidのバージョンアップは、今AndroidXがV4を放棄したライブラリーのテスト、V7なバージョンを持っているので

7は、Androidで起動した後、A FileProviderはv4のバッグを試してみてください

しかし、その代わりにAndroidxライブラリ適応アンドロイド10、後になります 

androidx.core.content.FileProvider;

この位置では、このようなQQやマイクロ文字として解析し、あなたはQQとマイクロチャネルに起因して利用できるオンラインソースgetFPUriToPath機能障害は、この機能プロセスでの検証にAndroidxライブラリFileProviderリードの新しいバージョンを使用していなかったでしょう失敗は、今最も簡単な解決策は、この段階認証プロセスを削除することです。直感的には、このステップは、全体的な検証には影響を与えません。

次のように変更されたソースコード

package com.aiocw.aihome.easylauncher.common;

import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo;
import android.net.Uri;


import androidx.core.content.FileProvider;

import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;

public class ProviderTools {

    public static String getFPUriToPath(Context context, Uri uri) {
        try {
            List<PackageInfo> packs = context.getPackageManager().getInstalledPackages(PackageManager.GET_PROVIDERS);
            if (packs != null) {
                String fileProviderClassName = FileProvider.class.getName();
                for (PackageInfo pack : packs) {
                    ProviderInfo[] providers = pack.providers;
                    if (providers != null) {
                        for (ProviderInfo provider : providers) {
                            if (uri.getAuthority().equals(provider.authority)) {
//                                if (provider.name.equalsIgnoreCase(fileProviderClassName)) {
                                    Class<FileProvider> fileProviderClass = FileProvider.class;
                                    try {
                                        Method getPathStrategy = fileProviderClass.getDeclaredMethod("getPathStrategy", Context.class, String.class);
                                        getPathStrategy.setAccessible(true);
                                        Object invoke = getPathStrategy.invoke(null, context, uri.getAuthority());
                                        if (invoke != null) {
                                            String PathStrategyStringClass = FileProvider.class.getName() + "$PathStrategy";
                                            Class<?> PathStrategy = Class.forName(PathStrategyStringClass);
                                            Method getFileForUri = PathStrategy.getDeclaredMethod("getFileForUri", Uri.class);
                                            getFileForUri.setAccessible(true);
                                            Object invoke1 = getFileForUri.invoke(invoke, uri);
                                            if (invoke1 instanceof File) {
                                                String filePath = ((File) invoke1).getAbsolutePath();
                                                return filePath;
                                            }
                                        }
                                    } catch (NoSuchMethodException e) {
                                        e.printStackTrace();
                                    } catch (InvocationTargetException e) {
                                        e.printStackTrace();
                                    } catch (IllegalAccessException e) {
                                        e.printStackTrace();
                                    } catch (ClassNotFoundException e) {
                                        e.printStackTrace();
                                    }
                                    break;
//                                }
//                                break;
                            }
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

 

公開された24元の記事 ウォンの賞賛4 ビュー30000 +

おすすめ

転載: blog.csdn.net/qq_20081893/article/details/104333799