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