Android 有没有办法从本机代码访问Flutter资源?
我想在我的原生Android代码中使用Flitter资源中的主徽标-例如,显示通知。正如您所知,在Android中,您通常从Android 有没有办法从本机代码访问Flutter资源?,android,flutter,Android,Flutter,我想在我的原生Android代码中使用Flitter资源中的主徽标-例如,显示通知。正如您所知,在Android中,您通常从drawable文件夹获取资源,如R.drawable.icon。但是我还必须将图标复制到Android drawable文件夹中。也许有一种方法可以从本机代码中访问flatter资源(读取资产)在本教程中有一个很好的章节 为android(自1.22起)提供一个资产“icons/heart.png”: flatterLoader=flatterInjector.insta
drawable
文件夹获取资源,如R.drawable.icon
。但是我还必须将图标复制到Android drawable文件夹中。也许有一种方法可以从本机代码中访问flatter资源(读取资产)在本教程中有一个很好的章节
为android(自1.22起)提供一个资产“icons/heart.png”:
flatterLoader=flatterInjector.instance().flatterLoader()
String key=loader.getLookupKeyForAsset(“icons/heart.png”)
国际监督组织(swift):
let key=registrator.lookupKey(对于集合:“icons/heart.png”)
让path=Bundle.main.path(forResource:key,of type:nil)
对于iOS(obj-c):
NSString*key=[Registrator lookupKeyForAsset:@“icons/heart.png”]
NSString*路径=[[NSBundle mainBundle]路径资源:键
类型:nil]
对于1.22版之前的android(已弃用):
AssetManager AssetManager=registrator.context().getAssets()
String key=registrator.lookupKeyForAsset(“icons/heart.png”)
AssetFileDescriptor fd=assetManager.openFd(键)
但是,您将无法将可绘制的项目直接共享到Flatter,主图标是一个特殊情况,您肯定也无法与Flatter共享。Flatter不知道什么是“drawable”,而是以自己的跨平台方式处理资源。在文章中有一个很好的章节 为android(自1.22起)提供一个资产“icons/heart.png”: flatterLoader=flatterInjector.instance().flatterLoader() String key=loader.getLookupKeyForAsset(“icons/heart.png”) 国际监督组织(swift): let key=registrator.lookupKey(对于集合:“icons/heart.png”) 让path=Bundle.main.path(forResource:key,of type:nil) 对于iOS(obj-c): NSString*key=[Registrator lookupKeyForAsset:@“icons/heart.png”] NSString*路径=[[NSBundle mainBundle]路径资源:键 类型:nil] 对于1.22版之前的android(已弃用): AssetManager AssetManager=registrator.context().getAssets() String key=registrator.lookupKeyForAsset(“icons/heart.png”) AssetFileDescriptor fd=assetManager.openFd(键)
但是,您将无法将可绘制的项目直接共享到Flatter,主图标是一个特殊情况,您肯定也无法与Flatter共享。Flatter不知道什么是“可绘制”,而是以自己的跨平台方式处理资源。您需要获取资产文件的相对路径 下面是从swift本机代码访问文件/图像路径的帮助器方法
func flutterAssetLottieFilePath(imageName : String) -> String {
var flutterViewController = FlutterViewController()
flutterViewController = UIWindow.init(frame: UIScreen.main.bounds).rootViewController as! FlutterViewController
let key = flutterViewController.lookupKey(forAsset:"assets/images/\(imageName).png")
let path = Bundle.main.path(forResource: key, ofType: nil)
return path ?? ""
}
您需要获取资产文件的相对路径 下面是从swift本机代码访问文件/图像路径的帮助器方法
func flutterAssetLottieFilePath(imageName : String) -> String {
var flutterViewController = FlutterViewController()
flutterViewController = UIWindow.init(frame: UIScreen.main.bounds).rootViewController as! FlutterViewController
let key = flutterViewController.lookupKey(forAsset:"assets/images/\(imageName).png")
let path = Bundle.main.path(forResource: key, ofType: nil)
return path ?? ""
}
当我写这篇文章时,它已经过时了。在我的颤振版本中,1.17.1这里有一个kotlin android示例,上面有必要的导入:
import android.content.Context
import io.flutter.embedding.engine.loader.FlutterLoader
import java.io.InputStream
val myAssetPath : Sting = "assets/my_asset"
val assetLookupKey = FlutterLoader.getInstance().getLookupKeyForAsset(myAssetPath)
val inputStream: InputStream = applicationContext.assets.open(assetLookupKey)
// Read in the file from the InputStream...
应该注意的是,从这个getLookupKeyForAsset方法返回的值通常是您的资产路径,它包含在资产下的pubspec.yaml中,只是以“flatter_assets/”作为前缀。因此,在上面的示例中,它将返回flatter\u assets/assets/my\u assets,因为我写这篇文章时,它已经过时了。在我的颤振版本中,1.17.1这里有一个kotlin android示例,上面有必要的导入:
import android.content.Context
import io.flutter.embedding.engine.loader.FlutterLoader
import java.io.InputStream
val myAssetPath : Sting = "assets/my_asset"
val assetLookupKey = FlutterLoader.getInstance().getLookupKeyForAsset(myAssetPath)
val inputStream: InputStream = applicationContext.assets.open(assetLookupKey)
// Read in the file from the InputStream...
应该注意的是,从这个getLookupKeyForAsset方法返回的值通常是您的资产路径,它包含在资产下的pubspec.yaml中,只是以“flatter_assets/”作为前缀。因此,在上述示例中,它将返回颤振资产/assets/my_资产更新新版本 对于颤振版本1.22或更高版本,颤振加载器只能通过颤振注入器访问
导入io.flatter.flatterInjector代码>
FlutterLoader loader = FlutterInjector.instance().flutterLoader();
String key = loader.getLookupKeyForAsset("assets_file_name");
更新新版本 对于颤振版本1.22或更高版本,颤振加载器只能通过颤振注入器访问
导入io.flatter.flatterInjector代码>
FlutterLoader loader = FlutterInjector.instance().flutterLoader();
String key = loader.getLookupKeyForAsset("assets_file_name");
是否尝试运行由
flatter run
/flatter build
工具创建的.apk
文件?您是否注意到它在根目录中包含资产
文件夹?是否尝试使用颤振运行
/颤振构建
工具创建的.apk
文件?你有没有注意到它在根目录中包含assets
文件夹?如果我不是在插件上,而是在main活动中呢?如何将AssetFileDescriptor转换为可绘制文件或资源?PluginRegistry.Registrator已被弃用。@SurajNair的答案包含更新的代码。如果我不是在插件上,而是在MainActivity中,该怎么办?如何将AssetFileDescriptor转换为可绘制文件或资源?PluginRegistry.Registrator已被弃用。@SurajNair的答案包含更新的代码。然后,如何将您的钥匙转换为可拉拔的?然后,如何将您的钥匙转换为可拉拔的?