andorid在 Fragment中调用摄像机

我现在一个activity中有三个multiple fragments ,我现在采集我第三个 fragments信息

在这个fragments 上我想启动相机或者图库,看下面代码


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

public Intent getImageIntent() {

    // Camera.

    final List<Intent> cameraIntents = new ArrayList<Intent>();

    final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

    final PackageManager packageManager = context.getPackageManager();

    final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0);

    for (ResolveInfo res : listCam) {

        final String packageName = res.activityInfo.packageName;

        final Intent intent = new Intent(captureIntent);

        intent.setComponent(new ComponentName(res.activityInfo.packageName,

                res.activityInfo.name));

        intent.setPackage(packageName);

        cameraIntents.add(intent);

    }

    // Filesystem.

    final Intent galleryIntent = new Intent();

    galleryIntent.setType("image/*");

    galleryIntent.setAction(Intent.ACTION_GET_CONTENT);

    // Chooser of filesystem options.

    final Intent chooserIntent = Intent.createChooser(galleryIntent, "Select Source");

    // Add the camera options.

    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,

            cameraIntents.toArray(new Parcelable[] {}));

    // Calling activity should exeecute:

    // startActivityForResult(chooserIntent, 1);

    return chooserIntent;

}

After that the onActivityResult executes:

private void handleSmallCameraPhoto(Intent intent) {

    Bundle extras = intent.getExtras();

    mProductBitmap = (Bitmap) extras.get("data");

    imgProduct.setImageBitmap(mProductBitmap);

}

其中 mProductBitmap  是一个Bitmap类型的全局变量,imgProduct  是一个已经初始化的 ImageView ,

我现在有如下问题:

1、相机选项强制关闭了app.并在fragment  中报错了nullpointException

2、图册选项不报错,但是不显示任何图片

3、有的时候  在执行完onActivityResult 之后Context 为null


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

@Override

public void onActivityResult(int requestCode, int resultCode, Intent intent) {

    if (resultCode == Activity.RESULT_OK) {

        handleSmallCameraPhoto(intent);

    else {

        if (requestCode == 1) {

            InputStream stream = null;

            if (intent == null) {

                System.out.println("DATA IS NULL..");

            else {

                try {

                    if (mProductBitmap != null) {

                        mProductBitmap.recycle();

                    }

                    stream = getActivity().getContentResolver().openInputStream(

                            intent.getData());

                    mProductBitmap = BitmapFactory.decodeStream(stream);

                    System.out.println(mProductBitmap);

                    System.out.println("Setting image result");

                    imgProduct.setImageBitmap(mProductBitmap);

                catch (FileNotFoundException e) {

                    e.printStackTrace();

                finally {

                    if (stream != null)

                        try {

                            stream.close();

                        catch (IOException e2) {

                            e2.printStackTrace();

                        }

                }

            }

        }

    }

处理方法

你的图片已经报错到了 PATH_TO_SAVE  地址中

你需要在你的onActivityResult  方法中做么做

File file = new File(PATH_TO_SAVE);

Bitmap bmp = BitmapFactory.decodeFile(file.getPath());

原文地址:http://www.itmmd.com/201411/158.html

该文章由 萌萌的IT人 整理发布,转载须标明出处。

时间: 2024-10-21 03:47:20

andorid在 Fragment中调用摄像机的相关文章

Android Fragment中调用getActivity为null的问题

在使用fragment的时候经常会遇到getActivity()为null的情况.比如我在一个异步网路请求的回调中调用了getActivity()就会出现空指针问题.之前解决这个问题,通常都是直接加空指针判断来规避,但是这并没有真正解决问题. 很多人都曾被这个问题所困扰,如果app长时间在后台运行,再次进入app的时候可能会出现crash,而且fragment会有重叠现象.如果系统内存不足.切换横竖屏.app长时间在后台运行,Activity都可能会被系统回收然后重建,但Fragment并不会随

在fragment中调用SharedPreferences

Activity中调用SharedPreferences的方式: String prefsName = "mysetting"; SharedPreferences prefs = getSharedPreferences(prefsName, Context.MODE_PRIVATE); boolean a1 = prefs.getBoolean("a1_key", false); boolean a2 = prefs.getBoolean("a2_ke

Fragment中调用Activity的UI

1:Fragment内定义一个接口,或外部定义一个接口, 2:Fragment定义一个接口对象的属性 3:Activity实现这个接口 4:Fragment的onAttach方法中强转Activity为接口 例如: @Override public void onAttach(Activity activity) { super.onAttach(activity); try { onFragmentChangeListener = (OnFragmentChangeListener)activ

Android的Fragment中onActivityResult不被调用的解决方案

常见的,我们会在FragmentActivity中嵌套一层Fragment使用,甚至两次或多层Fragment嵌套使用.这个时候,在第二级或者更深级别的Fragment调用startActivityForResult方法时,将无法收到onActivityResult回调.阅读FragementActivity源码后发现,原来是源码里没有处理嵌套Fragment的情况,也就是说回调只到第一级Fragment,就没有继续分发.我们可以实现一个自己的AppCompatActivity,来实现继续分发,

Android 在 Fragment 中使用 getActivity() NullPointException 的思考和解决办法

问题: 使用 AS 在 Fragment 中调用 getActivity() 方法的时候会出现可能为空指针的提醒 使用 monkey 多次十万次测试,会出现 getActivity() NullPointException 的情况 思考 为什么会出现这种情况,按说当前 Activity 存在,在 Fragment 中使用 getActivity() 是可以拿到的,不应该为空的 源码 fragment 的生命周期 以下源码基于 API 26 getActivity 可能为 Null, 跟进源码,可

Android的Fragment中onActivityResult不被调用的解决方案(绝对管用)

常见的,我们会在FragmentActivity中嵌套一层Fragment使用,甚至Fragment下层层嵌套使用.这个时候,在第二级或者更深级别的Fragment将无法收到onActivityResult回调,查看FragementActivity的源码发现: public void startActivityFromFragment(Fragment fragment, Intent intent, : int requestCode) { : if (requestCode == -1)

67、activity中调用fragment内部自定义的方法

fragment: /** * author: Created by zzl on 15/11/19. */ @SuppressLint("validFragment") public class pushMealHistoryFragment extends Fragment { Context ctxt; View gridALl; public pushMealHistoryFragment(Context ctxt) { this.ctxt = ctxt; } @Nullabl

Fragment中的setUserVisibleHint()方法调用

使用Fragment的时候难免会遇到想在视图可见与不可见之中做些操作,此时通常会想到类似Activity中的onResume()和onPause()方法.Fragment中也确实有这两个方法,然而亲测support.v4.Fragment中的这两个方法其实是执行的Activity的方法,也就是只有在Activity的可视性发生变化时才会调用.又从网上找到类似的方法,setUserVisibleHint(), 但是事实证明改方法也不见得就能满足需求,在Fragment中重写该方法系统并不会调用改方

Android 在Fragment中执行onActivityResult不被调用的简单解决方法

在Android开发中,我们经常会用到FragmentActivity下嵌套多个Fragment,但是在开发过程中会发现在嵌套的Fragment中使用onActivityResult回调方法没有被执行. 网上也有很多解决方法,但是说的都比较麻烦,所以今天给大家推荐一种超简单的用法, 在Fragment和FragmentActivity中都要重写onActivityResult方法,并且要保证两者的请求码或者结果码一致.代码如下: 在FragmentActivity中 @Override prot