Android 在同一设备上使用IPC应用程序到应用程序通信传输图像
我想知道是否有任何有效的方法使用IPC进行应用程序到应用程序的通信。我从文档中找到了使用AIDL的服务指南。但我真正想要的是在它们之间传输一个图像。(图像质量很高)唯一的问题是android只允许我们使用1024KB甚至更少的空间来通过捆绑包传递数据。如果您做的不止这些,您将以TransactionTooLargeException结束。现在我正在压缩图像,并在两个应用程序之间传递base64字符串,效果很好。但有时有些图像根本无法压缩。我怎么能做那样的事。我正在使用压缩图像 compress(imageformat=webp,quality=90,compress.nowrap) 如果我得到TransactionTooLargeException,质量将降低10。关于如何在android上做类似的事情有什么想法吗 但问题是我不想打开任何其他应用程序。我正在接收的图像将被处理,并向从应用程序发送的图像发送状态。类似于“非常酷的图像”“非常糟糕的图像”。处于字符串状态 谢谢Android 在同一设备上使用IPC应用程序到应用程序通信传输图像,android,android-service,ipc,aidl,android-service-binding,Android,Android Service,Ipc,Aidl,Android Service Binding,我想知道是否有任何有效的方法使用IPC进行应用程序到应用程序的通信。我从文档中找到了使用AIDL的服务指南。但我真正想要的是在它们之间传输一个图像。(图像质量很高)唯一的问题是android只允许我们使用1024KB甚至更少的空间来通过捆绑包传递数据。如果您做的不止这些,您将以TransactionTooLargeException结束。现在我正在压缩图像,并在两个应用程序之间传递base64字符串,效果很好。但有时有些图像根本无法压缩。我怎么能做那样的事。我正在使用压缩图像 compress(
iirc,android不允许进程间通信,但我可能错了。为此,您可能希望将数据分成多个块。这真的是两个应用程序吗,你用的是bundle…我觉得你好像在尝试进行互动交流。我已经用link更新了这个问题。请参阅。保存在GetFileDir()中,并使用FileProvider为您的文件提供服务。传输从文件的FileProvider获取的uri的uri.toString()。我不知道是否可以授予阅读权限,或者使用您自己的内容提供商。如果您只是在授权应用程序之间进行图像传输:或者
如果您只是在进行图像传输,我们将其理解为如果您只是在进行文件传输@Morrison Chang
var quality = 100
private fun sendImageToDevice(quality: Int, icon: Bitmap) {
Log.e(TAG, "quality of image is $quality ")
runOnUiThread {
Toast.makeText(
this@MainActivity,
"Image Quality $quality",
Toast.LENGTH_SHORT
)
.show()
}
if (quality > 0)
try {
mProcessImageService?.sendImageFormat(icon.toBase64(quality))
} catch (e: TransactionTooLargeException) {
e.message
this.quality = quality - 20
sendImageToDevice(this.quality, icon)
}
else {
}
}
fun Bitmap.toBase64(quality: Int): String {
val outputStream = ByteArrayOutputStream()
this.compress(Bitmap.CompressFormat.JPEG, quality, outputStream)
val base64String: String = Base64.encodeToString(outputStream.toByteArray(), Base64.NO_WRAP)
Log.d("MainActivity", "outputstream size is ${outputStream.size()}")
return base64String
}