我使用默认相机来捕获视频:
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT,MAX_DURATION);
intent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, MAX_SIZE_BYTES);
startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)
如何将文件容器设置为 .mp4 而不是 .3gp?
此问题仅出现在两款较旧的三星 Galaxy 机型上,但仍然非常容易重现。
我有一个简单的应用程序,可以显示通过设备的相机应用程序拍摄的照片。它有一个按钮来启动该应用程序,并在 AsyncTask 中处理结果以将其下采样到 ImageView 中。
从相机应用程序返回时的活动流程会出现问题:由于某种原因,活动被创建,处理导致 AsyncTask 中的结果onActivityResult()被销毁,然后立即重新创建。一旦 AsyncTask 完成,它就会保存对不正确/旧活动的引用。
将一些调试语句放入各种生命周期回调中会发现这种奇怪的行为:
06-02 16:01:53.509: I/myapp(4437): onCreate com.myapp.PhotoActivity_@488cbef8
06-02 16:01:53.509: I/myapp(4437): onResume com.myapp.PhotoActivity_@488cbef8
06-02 16:01:58.298: I/myapp(4437): onPause com.myapp.PhotoActivity_@488cbef8
06-02 16:01:59.470: I/myapp(4437): onStop com.myapp.PhotoActivity_@488cbef8
[a photo is taken in the camera app]
06-02 16:02:10.196: I/myapp(4437): onCreate com.myapp.PhotoActivity_@4874f8b8
06-02 16:02:10.251: I/myapp(4437): onActivityResult com.myapp.PhotoActivity_@4874f8b8
06-02 16:02:10.259: I/myapp(4437): onResume com.myapp.PhotoActivity_@4874f8b8
06-02 16:02:10.712: I/myapp(4437): onPause com.myapp.PhotoActivity_@4874f8b8
06-02 16:02:10.720: I/myapp(4437): onStop com.myapp.PhotoActivity_@4874f8b8
06-02 16:02:10.923: I/myapp(4437): onCreate com.myapp.PhotoActivity_@48817118
06-02 16:02:10.931: I/myapp(4437): onResume com.myapp.PhotoActivity_@48817118
06-02 …Run Code Online (Sandbox Code Playgroud) android activity-lifecycle android-camera-intent android-lifecycle
我有一个代码,我将从相机捕获的图像设置为矢量,然后使用图像适配器显示捕获的图像。但是我在 OnActivityResut 中得到的结果代码为 0,数据为 null。下面是启动相机的代码,它有效,即我使用相机单击图像
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_REQUEST);
Run Code Online (Sandbox Code Playgroud)
然后我使用 OnActivityResult 如下
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK)
{
ImageView photo = (ImageView) data.getExtras().get("data");
m_oVectorOfImages.add(photo);
m_oImageAdapter.notifyDataSetChanged();
}
}
Run Code Online (Sandbox Code Playgroud)
我能知道为什么 resultcode 为 0 而 data 为 null 吗?
android android-intent android-camera android-camera-intent android-activity
我想使用 Android 相机拍摄照片并将其保存到我的 SD 卡中。我知道这很容易,但我想以低分辨率存储图像,而不告诉用户手动设置并设置低分辨率。
camera android surfaceview android-camera android-camera-intent
我在尝试使用camera2 api从CameraManager实例获取相机ID列表时收到此错误消息:
UnhandledException:android.hardware.camera2.CameraAccessException
这是我的代码
CameraManager manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
String cameraId = manager.getCameraIdList()[0];
Run Code Online (Sandbox Code Playgroud)
我在第二行收到错误消息。我已经在清单中设置了相机权限,甚至确保我的物理手机已打开、连接并设置为开发人员模式(尽管我认为这不会产生任何影响),但想不出其他任何事情这与我在网上看到的所有简单示例不同。
下面是完整的 MainActivity 代码:
任何建议表示赞赏...
import android.content.Context;
import android.content.pm.PackageManager;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CameraAccessException;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.internal.app.ToolbarActionBar;
import android.support.v7.widget.CardView;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toolbar;
import com.google.zxing.integration.android.IntentIntegrator;
import org.joda.time.DateTime;
import java.util.ArrayList;
import java.util.List;
import Model.Consumer;
import Model.Plan;
import Model.Product;
import Model.ProductInfo;
import Model.Retailer;
import Model.Transaction;
public class MainActivity extends AppCompatActivity {
private android.support.v7.widget.Toolbar toolbar;
private RecyclerView recList; …Run Code Online (Sandbox Code Playgroud) 我知道我可以在清单中设置活动的方向,但是当此活动调用MediaStore.ACTION_IMAGE_CAPTURE打开相机并拍照时,用户仍然可以以横向模式拍照。我可以将相机应用程序本身的方向锁定为纵向吗?
这是示例代码:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
startActivityForResult(intent, TAKE_PICTURE);
Run Code Online (Sandbox Code Playgroud)
我想阻止用户拍摄任何风景照片。
任何帮助将不胜感激。
编辑:发现该主题的另一个问题尚未得到解答: How to lock the Camera app Direction Called through Intent in android?
我想实现以下目标:
intent在我的 MainActivity 中,我使用布尔值在USE_ANDROID_EXTERNAL_STORAGE_PUBLIC_DIRECTORY以下之间切换:
ExternalFilesDir(在我的例子中:/storage/emulated/0/Android/data/pub.openbook.labellor/files/Pictures)Public Directory(在我的例子中为/storage/emulated/0/DCIM)相机应用程序将成功地将照片文件保存在ExternalFilesDir中,但无法将文件保存到其公共目录中。由于这种情况发生在相机应用程序中,我无法对此进行调试。
我的问题:
(我的函数galleryAddPic()完成时没有崩溃,但没有达到目的。照片在图库应用程序中仍然不可见。)
我正在与:
android.os.Build.VERSION.SDK_INT23package pub.openbook.labellor;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.content.FileProvider;
import android.os.Environment; …Run Code Online (Sandbox Code Playgroud) 当我在红米7A上启动相机拍照时,我的应用程序自动崩溃。以下是崩溃日志:
E/CAM_CameraIntentManager: checkCallerLegality: Unknown caller: com.qikcircle.eclinic
Run Code Online (Sandbox Code Playgroud)
请帮助它确实没有显示到底是什么问题。
我的活动代码
class CaptureImageActivity : AppCompatActivity() {
private lateinit var mToolbar: Toolbar
private lateinit var mImage: ImageView
private var mBitmap: Bitmap? = null
private val getCameraAndStoragePermission = registerForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
if (hasAllPermissionsGranted(permissions)) {
dispatchTakePictureIntent()
} else {
Toast.makeText(
this,
resources.getString(R.string.allow_camera_permission),
Toast.LENGTH_SHORT)
.show()
finish()
}
}
private val takePicture =
registerForActivityResult(ActivityResultContracts.TakePicture()) { success ->
if (success) {
photoURI.let {
mBitmap = getBitmap(this, photoURI)
mImage.setImageBitmap(mBitmap)
goBack()
}
} else {
Toast.makeText(
this,
resources.getString(R.string.something_went_wrong),
Toast.LENGTH_SHORT) …Run Code Online (Sandbox Code Playgroud) android android-camera android-camera-intent kotlin redmi-device
我发现这是捕捉照片和接收全尺寸照片而不是缩略图的常见问题(根据:http://developer.android.com/training/camera/photobasics.html).拍摄照片和接收缩略图很容易,但教程的其余部分似乎不完整且无法正常工作.有人轻松解决了吗?
public class TakePhoto extends Activity{
static final int REQUEST_IMAGE_CAPTURE = 1;
static final int REQUEST_TAKE_PHOTO = 1;
private String mCurrentPhotoPath;
private ImageView mImageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.take_photo);
mImageView = (ImageView) findViewById(R.id.imageView);
dispatchTakePictureIntent();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_TAKE_PHOTO && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
mImageView.setImageBitmap(imageBitmap);
}
}
private void dispatchTakePictureIntent() {
Intent takePictureIntent = …Run Code Online (Sandbox Code Playgroud) 可以禁用/删除此照片确认对话框:
我需要以某种方式跳过此对话框,但仍要使用Intent。我找到了这个android:在没有“保存” /“删除”确认的情况下拍摄相机图片,但我不想使用SurfaceView。