class WritingArFragment: ArFragment() {
override fun getAdditionalPermissions(): Array<String?> {
val additionalPermissions = super.getAdditionalPermissions()
val permissionLength = additionalPermissions?.size ?: 0
val permissions = arrayOfNulls<String>(permissionLength + 1)
permissions[0] = Manifest.permission.WRITE_EXTERNAL_STORAGE
if (permissionLength > 0) {
System.arraycopy(additionalPermissions!!, 0, permissions, 1, additionalPermissions.size)
}
return permissions
}
}
然后片段显示了在AR环境中添加3D模型时,相机正在查看的内容。以下是我保存图片的方法:
private fun generateFilename(): String {
val date = SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault()).format(Date())
return Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES).toString() + File.separator + "Sceneform/" + date + "_screenshot.jpg"
}
@Throws(IOException::class)
private fun saveBitmapToDisk(bitmap: Bitmap, filename: String) {
val out = File(filename)
if (!out.parentFile.exists()) {
out.parentFile.mkdirs()
}
try {
FileOutputStream(filename).use { outputStream ->
ByteArrayOutputStream().use { outputData ->
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outputData)
outputData.writeTo(outputStream)
outputStream.flush()
outputStream.close()
}
}
} catch (ex: IOException) {
throw IOException("Failed to save bitmap to disk", ex)
}
}
私人乐趣takePicture(){val filename=generateFilename()val view=arFragment.arSceneView
// Create a bitmap the size of the scene view.
val bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(),
Bitmap.Config.ARGB_8888)
// Create a handler thread to offload the processing of the image.
val handlerThread = HandlerThread("PixelCopier")
handlerThread.start()
// Make the request to copy.
PixelCopy.request(view, bitmap, { copyResult ->
if (copyResult == PixelCopy.SUCCESS) {
try {
saveBitmapToDisk(bitmap, filename)
val snackbar = Snackbar.make(findViewById(android.R.id.content),
"Photo saved", Snackbar.LENGTH_LONG)
snackbar.setAction("Open in Photos") { v ->
val photoFile = File(filename)
val photoURI = FileProvider.getUriForFile(this.getApplication(),
"$packageName.example.secondar.name.provider",
photoFile)
val intent = Intent(Intent.ACTION_VIEW, photoURI)
intent.setDataAndType(photoURI, "image/*")
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
startActivity(intent)
}
snackbar.show()
} catch (e: IOException) {
e.printStackTrace()
val toast = Toast.makeText(this.getApplication(), e.toString(),
Toast.LENGTH_LONG)
toast.show()
}
} else {
val toast = Toast.makeText(this.getApplication(),
"Failed to copyPixels: $copyResult", Toast.LENGTH_LONG)
toast.show()
}
handlerThread.quitSafely()
}, Handler(handlerThread.looper))
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-feature android:name="android.hardware.camera.ar" android:required="true"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:usesCleartextTraffic="true"
android:theme="@style/AppTheme">
<meta-data android:name="com.google.ar.core" android:value="required" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.example.secondar.name.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/paths"/>
</provider>
</application>
2019-11-19 14:05:04.503 5383-5553/com.example.secondar W/System.err: java.io.IOException: Failed to save bitmap to disk
2019-11-19 14:05:04.503 5383-5553/com.example.secondar W/System.err: at com.example.secondar.MainActivity.saveBitmapToDisk(MainActivity.kt:238)
2019-11-19 14:05:04.504 5383-5553/com.example.secondar W/System.err: at com.example.secondar.MainActivity.access$saveBitmapToDisk(MainActivity.kt:45)
2019-11-19 14:05:04.504 5383-5553/com.example.secondar W/System.err: at com.example.secondar.MainActivity$takePicture$1.onPixelCopyFinished(MainActivity.kt:258)
2019-11-19 14:05:04.504 5383-5553/com.example.secondar W/System.err: at android.view.PixelCopy$1.run(PixelCopy.java:191)
2019-11-19 14:05:04.504 5383-5553/com.example.secondar W/System.err: at android.os.Handler.handleCallback(Handler.java:883)
2019-11-19 14:05:04.504 5383-5553/com.example.secondar W/System.err: at android.os.Handler.dispatchMessage(Handler.java:100)
2019-11-19 14:05:04.504 5383-5553/com.example.secondar W/System.err: at android.os.Looper.loop(Looper.java:214)
2019-11-19 14:05:04.504 5383-5553/com.example.secondar W/System.err: at android.os.HandlerThread.run(HandlerThread.java:67)
2019-11-19 14:05:04.504 5383-5553/com.example.secondar W/System.err: Caused by: java.io.FileNotFoundException: /storage/emulated/0/Pictures/Sceneform/20191119140504_screenshot.jpg: open failed: EACCES (Permission denied)
2019-11-19 14:05:04.505 5383-5553/com.example.secondar W/System.err: at libcore.io.IoBridge.open(IoBridge.java:496)
2019-11-19 14:05:04.505 5383-5553/com.example.secondar W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:235)
2019-11-19 14:05:04.505 5383-5553/com.example.secondar W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:125)
2019-11-19 14:05:04.505 5383-5553/com.example.secondar W/System.err: at com.example.secondar.MainActivity.saveBitmapToDisk(MainActivity.kt:229)
2019-11-19 14:05:04.505 5383-5553/com.example.secondar W/System.err: ... 7 more
2019-11-19 14:05:04.505 5383-5553/com.example.secondar W/System.err: Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
我有同样的问题,当尝试读取外部存储在我的AVD29像素,已经请求和收到的权限。
查看以下由Uriel Frankel提供的答案:
谷歌在Android Q上有一个新功能:用于外部存储的过滤视图。一个快速的解决方法是在AndroidManifest.xml文件中添加以下代码
<manifest ... >
<!-- This attribute is "false" by default on apps targeting Android Q. -->
<application android:requestLegacyExternalStorage="true" ... >
...
</application>
</manifest>
php的代码如图,为什么线上的url可以打开,但是保存到本地之后,就无法打开了?
本文向大家介绍写一个方法将html页面生成为图片相关面试题,主要包含被问及写一个方法将html页面生成为图片时的应答技巧和注意事项,需要的朋友参考一下 打开控制台, 打开控制台,输入 想要哪种截图,任君选择。
我试图在另一个片段中显示一个谷歌地图片段,但是我不能操纵地图,我已经把我看到的所有步骤都留档了,但是我不能操纵我的地图。 XML代码: 类片段代码: 主要活动类别代码: } 在调用getMapAsync()后,编辑以下堆栈跟踪: 空指针错误: 12-18 19:51:50.056 11265-11265/ar.com.taxiexpress.taxiexpressE/AndroidRuntime:
我试图制作一个图像,我把图例放在轴的外面。但是我发现如果我在方法,生成的图像不包含图例。下面是一个简单的工作示例: 如果我删除在方法中。(如下所示),图例存在于生成的图像中,但是在图像的四边有两个很大的空白。 有没有一种好方法可以保留图像的紧凑布局,并在生成的图像中保留图例? 按照这篇文章中的说明,我还尝试在方法中使用参数,如下所示 正如@dizietasahi和@importanceofbein
下面是一个div块: 我用html2canvas把这个div生成了图片,然后用jspdf把图片保存成pdf格式。 现在的问题是html2canvas把div生成图片时DIV里面的图片没有显示,这图片是需要单独处理吗?有遇到过这问题的没? 下面是代码:
代码完美的作品,但我有问题的权限拒绝,但我已经把READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE权限Android清单任何想法。已经尝试过这个无法解码流:java.io.FileNotFoundExc0019(权限被拒绝) 位图工厂﹕ 无法解码流-空 E/BitmapFactory:无法解码流:java.io.FileNotFoundException:/s