我有一个包含多个活动的android应用程序.
在其中一个我正在使用一个按钮,它将调用设备摄像头:
public void onClick(View view) {
Intent photoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(photoIntent, IMAGE_CAPTURE);
}
Run Code Online (Sandbox Code Playgroud)
在同一个活动中,我调用OnActivityResult图像结果的方法:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == IMAGE_CAPTURE) {
if (resultCode == RESULT_OK) {
Bitmap image = (Bitmap) data.getExtras().get("data");
ImageView imageview = (ImageView) findViewById(R.id.pic);
imageview.setImageBitmap(image);
} else if (resultCode == RESULT_CANCELED) {
Toast.makeText(this, "CANCELED ", Toast.LENGTH_LONG).show();
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题是intent data是null并且OnActivityResult方法直接转到,(resultCode == RESULT_CANCELED)并且应用程序返回到先前的avtivity.
如何修复此问题,并在调用相机后,应用程序返回当前活动,其中包含ImageView将包含拍摄的照片?
谢谢
今晚我正在做一些我认为很简单的事情......在/ mnt/sdcard中创建一个文件夹.
我已设置以下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
Run Code Online (Sandbox Code Playgroud)
我Main.java有以下内容来制作文件夹:
public class Main extends TabActivity {
static int index = 1;
private static final String TAG = "Main";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
File folder = new File(Environment.getExternalStorageDirectory () + "/tallgrass/images");
boolean success = false;
if(!folder.exists()){
success = folder.mkdir();
}
if (!success){
Log.d(TAG,"Folder not created.");
}
else{
Log.d(TAG,"Folder created!");
}
}
Run Code Online (Sandbox Code Playgroud)
我得到了"文件夹创建!" 我的日志中的消息,但当我检查两个/mnt/sdcard,/sdcard但没有一个文件夹.我试过打电话:
Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
Run Code Online (Sandbox Code Playgroud)
它返回true.我只是想不出这个,因为所有迹象都表明它应该有效.我已经尝试将手机与PC断开连接以防SD卡正在安装或者我正在使用手机而不是模拟器进行开发.说到这,不debuggable以true可能防止它做的文件夹?
谢谢!
例外情况是:
file:// Uri exposed through ClipData.Item.getUri()
java.lang.Throwable: file:// Uri exposed through ClipData.Item.getUri()
at android.os.StrictMode.onFileUriExposed(StrictMode.java:1618)
at android.net.Uri.checkFileUriExposed(Uri.java:2341)
at android.content.ClipData.prepareToLeaveProcess(ClipData.java:808)
at android.content.Intent.prepareToLeaveProcess(Intent.java:7926)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1506)
at android.app.Activity.startActivityForResult(Activity.java:3832)
at android.app.Activity.startActivityForResult(Activity.java:3783)
at android.support.v4.app.FragmentActivity.startActivityFromFragment(Unknown Source)
at android.support.v4.app.Fragment.startActivityForResult(Unknown Source)
at me.chunyu.ChunyuDoctor.Utility.w.takePhoto(Unknown Source)
at me.chunyu.ChunyuDoctor.Dialog.ChoosePhotoDialogFragment.takePhoto(Unknown Source)
at me.chunyu.ChunyuDoctor.Dialog.ChoosePhotoDialogFragment.access$000(Unknown Source)
at me.chunyu.ChunyuDoctor.Dialog.b.onClick(Unknown Source)
at me.chunyu.ChunyuDoctor.Dialog.ChoiceDialogFragment.onClick(Unknown Source)
at android.view.View.performClick(View.java:4848)
at android.view.View$PerformClick.run(View.java:20270)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5643)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Run Code Online (Sandbox Code Playgroud)
我的代码在这里:
public static void takePhoto(Fragment fragment, int token, Uri uri) {
Intent …Run Code Online (Sandbox Code Playgroud) 嗨我ACTION_IMAGE_CAPTURE用于捕获图像使用Intent如下:
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(
MediaStore.EXTRA_OUTPUT, (new File(Environment.getExternalStorageDirectory(),
String.valueOf(System.currentTimeMillis()) + ".jpg"))
);
startActivityForResult(cameraIntent, 0);
Run Code Online (Sandbox Code Playgroud)
我需要将图像存储在SD卡中,并使用该onActivityResult方法检索该图像的路径.我不知道如何获取当前捕获图像的图像路径.
如果有人知道请帮助.
谢谢
我有这个代码:
startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), CAMERA_IMAGE);
Run Code Online (Sandbox Code Playgroud)
这允许该用户拍照.现在我怎么能得到Uri那张照片onActivityResult?这是Intent额外的吗?通过了Intent.getData()吗?
谷歌提供这个多功能的代码,通过意图拍摄照片:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// create Intent to take a picture and return control to the calling application
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name
// start the image capture Intent
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}
Run Code Online (Sandbox Code Playgroud)
问题在于,如果你像我一样想要将照片作为附加照片传递,那么EXTRA_OUTPUT看似使用照片数据并使后续操作认为意图数据为空.
看来这是Android的一个大错误.
我正在尝试拍摄照片,然后在新视图中将其显示为缩略图.我想将它保存为用户图库中的全尺寸图像.有没有人知道如何指定图像位置而不使用EXTRA_OUTPUT?
这是我目前的情况:
public void takePhoto(View view) {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
// takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, …Run Code Online (Sandbox Code Playgroud) 伙计,当我发送要求拍摄照片的意图时,我仍然无法保存图片.这就是我在做的事情:
创建一个表示路径名的URI
android.content.Context c = getApplicationContext();
String fname = c.getFilesDir().getAbsolutePath()+"/parked.jpg";
java.io.File file = new java.io.File( fname );
Uri fileUri = Uri.fromFile(file);
Run Code Online (Sandbox Code Playgroud)创建Intent(不要忘记pkg名称!)并启动活动
private static int TAKE_PICTURE = 22;
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE );
intent.putExtra("com.droidstogo.boom1." + MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult( intent, TAKE_PICTURE );
Run Code Online (Sandbox Code Playgroud)相机活动开始,我可以拍照,并批准它.我onActivityResult()被召唤了.但我的文件没有写.URI为:file:///data/data/com.droidstogo.boom1/files/parked.jpg
我可以创建缩略图OK(通过不将额外的内容放入Intent),并且可以将该文件写入OK,然后再将其读回来).
任何人都可以看到我犯的是什么简单的错误?在logcat中没有任何明显的东西 - 相机显然正在拍照.谢谢,
彼得
我应该提一下,我在AndroidManifest.xml文件中设置了相应的权限:
<uses-permission android:name="android.permission.READ_OWNER_DATA" />
<uses-permission android:name="android.permission.WRITE_OWNER_DATA" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-library android:name="com.google.android.maps" />
</application>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?关于要尝试的事情的任何想法,以获得有关该问题的更多信息?
嗨,我有一个自定义相机,我点击按钮,点击它捕获图像...一切都很好,但在某些设备预览是拉伸,预览覆盖屏幕的一半,闪烁...一些奇怪的不需要的影响.如何解决这个问题?
这是我的代码:
相机活动:
preview = new Preview(this, (SurfaceView) findViewById(R.id.surfaceView));
preview.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
((FrameLayout) findViewById(R.id.preview)).addView(preview);
preview.setKeepScreenOn(true);
buttonClick = (Button) findViewById(R.id.buttonClick);
buttonClick.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// preview.camera.takePicture(shutterCallback, rawCallback, jpegCallback);
camera.takePicture(shutterCallback, rawCallback, jpegCallback);
// camera.setDisplayOrientation(90);
}
});
Run Code Online (Sandbox Code Playgroud)
预览课程:
class Preview extends ViewGroup implements SurfaceHolder.Callback {
private final String TAG = "Preview";
SurfaceView mSurfaceView;
SurfaceHolder mHolder;
Size mPreviewSize;
List<Size> mSupportedPreviewSizes;
Camera mCamera;
@SuppressWarnings("deprecation")
Preview(Context context, SurfaceView sv) {
super(context);
mSurfaceView = sv;
// addView(mSurfaceView);
mHolder = mSurfaceView.getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
} …Run Code Online (Sandbox Code Playgroud) 我试图从相机中单击图像并显示到imageview但是onactivityresult URI返回null.BUt下面的代码在JellyBean上运行正常,ICS具有裁剪功能.
呼唤意图
Intent pickIntent = new Intent();
pickIntent.setType("image/*");
pickIntent.setAction(Intent.ACTION_GET_CONTENT);
pickIntent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// we will handle the returned data in onActivityResult
String pickTitle = "Select or take a new Picture";
// startActivityForResult(captureIntent, 1);
Intent chooserIntent = Intent.createChooser(pickIntent, pickTitle);
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[]
{ captureIntent });
startActivityForResult(chooserIntent, GlobalVariables.GALLERY_MODE);
Run Code Online (Sandbox Code Playgroud)
onActivityResult
@SuppressLint("NewApi")
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
try
{
if (resultCode == RESULT_OK)
{
// user …Run Code Online (Sandbox Code Playgroud) android android-gallery android-image android-camera android-4.4-kitkat
我有一个相当简单的应用程序,从菜单启动相机.相机发射很好,但是当我拍完照片后拍到OK时,我的nexus上有一个NPE:
E/AndroidRuntime( 3891): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=null} to activity {net.asplode.tr/net.asplode.tr.PostImage}: java.lang.NullPointerException
E/AndroidRuntime( 3891): at android.app.ActivityThread.deliverResults(ActivityThread.java:3515)
E/AndroidRuntime( 3891): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3557)
E/AndroidRuntime( 3891): at android.app.ActivityThread.access$2800(ActivityThread.java:125)
E/AndroidRuntime( 3891): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2063)
E/AndroidRuntime( 3891): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 3891): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 3891): at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime( 3891): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 3891): at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 3891): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime( 3891): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime( 3891): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 3891): Caused by: java.lang.NullPointerException
E/AndroidRuntime( 3891): at net.asplode.tr.PostImage.onActivityResult(PostImage.java:92)
E/AndroidRuntime( 3891): at android.app.Activity.dispatchActivityResult(Activity.java:3890)
E/AndroidRuntime( 3891): …Run Code Online (Sandbox Code Playgroud) android ×10
camera ×5
image ×2
java ×2
uri ×2
file ×1
mediastore ×1
mkdir ×1
performance ×1
save ×1