簡體   English   中英

相機服務在Android中崩潰

[英]Camera service crashes in Android

我正在寫和使用相機的Android應用程序。 活動保存並成像后,另一個活動對其進行處理。 這是保存圖像的活動的代碼

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

import android.app.Activity;
import android.content.Intent;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.hardware.Camera.Size;

import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;

import android.util.Log;
import android.view.KeyEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.Toast;

public class TakePictureActivity extends Activity implements
        SurfaceHolder.Callback {
    private Camera mCamera;
    private Button takePictureButton;
    private SurfaceView mSurfaceView;
    private SurfaceHolder mSurfaceHolder;
    private boolean mPreviewRunning;
    private String currentPictureName;
    private String sdcardPath = "/sdcard/DCIM";

    Camera.PictureCallback mPictureCallback = new Camera.PictureCallback() {
        @Override
        public void onPictureTaken(byte[] data, Camera c) {
            currentPictureName = Long.toString(System.currentTimeMillis())
                    + ".jpg";

            FileOutputStream outStream = null;
            try {
                outStream = new FileOutputStream(sdcardPath
                        + currentPictureName);
                outStream.write(data);
                outStream.close();

                sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
                        Uri.parse("file://"
                                + Environment.getExternalStorageDirectory())));
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                mCamera.startPreview();
            }
        }
    };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFormat(PixelFormat.TRANSLUCENT);
        setContentView(R.layout.takepicture);

        mSurfaceView = (SurfaceView) findViewById(R.id.preview);
        mSurfaceHolder = mSurfaceView.getHolder();
        mSurfaceHolder.addCallback(this);
        mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

        takePictureButton = (Button) findViewById(R.id.buttonTakePhoto);
        takePictureButton.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                mCamera.takePicture(null, null, mPictureCallback);
            }
        });
    }

    public void surfaceCreated(SurfaceHolder holder) {
        mCamera = Camera.open();
    }

    private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) {
        final double ASPECT_TOLERANCE = 0.1;
        double targetRatio = (double) w / h;
        if (sizes == null)
            return null;

        Size optimalSize = null;
        double minDiff = Double.MAX_VALUE;

        int targetHeight = h;

        // Try to find an size match aspect ratio and size
        for (Size size : sizes) {
            double ratio = (double) size.width / size.height;
            if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE)
                continue;
            if (Math.abs(size.height - targetHeight) < minDiff) {
                optimalSize = size;
                minDiff = Math.abs(size.height - targetHeight);
            }
        }

        // Cannot find the one match the aspect ratio, ignore the requirement
        if (optimalSize == null) {
            minDiff = Double.MAX_VALUE;
            for (Size size : sizes) {
                if (Math.abs(size.height - targetHeight) < minDiff) {
                    optimalSize = size;
                    minDiff = Math.abs(size.height - targetHeight);
                }
            }
        }
        return optimalSize;
    }

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        if (mPreviewRunning) {
            mCamera.stopPreview();
        }
        Camera.Parameters p = mCamera.getParameters();
        List<Camera.Size> previewSizes = p.getSupportedPreviewSizes();
        Size s = getOptimalPreviewSize(previewSizes, w, h);

        p.setPreviewSize(s.width, s.height);
        // p.setPreviewSize(s.height, s.width);
        mCamera.setParameters(p);
        try {
            mCamera.setPreviewDisplay(holder);
        } catch (IOException e) {
            e.printStackTrace();
        }
        mCamera.startPreview();
        mPreviewRunning = true;
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        if (mCamera != null) {
            mCamera.stopPreview();
            mCamera.setPreviewCallback(null);
            mCamera.release();
            mCamera = null;
        }
    }

    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            return super.onKeyDown(keyCode, event);
        }

        if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
            mCamera.takePicture(null, null, mPictureCallback);
            return true;
        }
        return false;
    }

    public void snapClicked(View view) {
        Log.e("@@@@@@@@@", "snapclicked called");
        mCamera.takePicture(null, null, mPictureCallback);
        Toast.makeText(this, "Picture saved on sd card", Toast.LENGTH_SHORT)
                .show();
    }
}

問題是,當我使用此應用程序時,相機服務在兩到三張照片后崩潰,而我的應用程序也隨之崩潰。 它確實保存了一些圖片。 並且在崩潰后,內置的相機應用無法打開。 這是清單:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.apps.objectdetection"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="10" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".ObjectDetection" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".TakePictureActivity" />
        <activity android:name=".AnalyzeActivity" />
    </application>

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />

</manifest>

我在這里想念什么?

編輯:添加logcat輸出

    I/PackageManager(   69): Removing non-system package:com.apps.objectdetection
I/ActivityManager(   69): Force stopping package com.apps.objectdetection uid=10036
D/PackageManager(   69): Scanning package com.apps.objectdetection
I/PackageManager(   69): Package com.apps.objectdetection codePath changed from /data/app/com.apps.objectdetection-1.apk to /data/app/com.apps.objectdetection-2.apk; Retaining data and using new
I/PackageManager(   69): Unpacking native libraries for /data/app/com.apps.objectdetection-2.apk
D/dalvikvm(   69): GC_CONCURRENT freed 1266K, 48% free 4269K/8199K, external 4373K/5573K, paused 9ms+7ms
D/installd(   35): DexInv: --- BEGIN '/data/app/com.apps.objectdetection-2.apk' ---
D/dalvikvm(  333): DexOpt: load 64ms, verify+opt 376ms
D/installd(   35): DexInv: --- END '/data/app/com.apps.objectdetection-2.apk' (success) ---
W/PackageManager(   69): Code path for pkg : com.apps.objectdetection changing from /data/app/com.apps.objectdetection-1.apk to /data/app/com.apps.objectdetection-2.apk
W/PackageManager(   69): Resource path for pkg : com.apps.objectdetection changing from /data/app/com.apps.objectdetection-1.apk to /data/app/com.apps.objectdetection-2.apk
D/PackageManager(   69):   Activities: com.apps.objectdetection.ObjectDetection com.apps.objectdetection.TakePictureActivity com.apps.objectdetection.AnalyzeActivity
I/ActivityManager(   69): Force stopping package com.apps.objectdetection uid=10036
I/installd(   35): move /data/dalvik-cache/data@app@com.apps.objectdetection-2.apk@classes.dex -> /data/dalvik-cache/data@app@com.apps.objectdetection-2.apk@classes.dex
D/PackageManager(   69): New package installed in /data/app/com.apps.objectdetection-2.apk
I/ActivityManager(   69): Force stopping package com.apps.objectdetection uid=10036
D/dalvikvm(  139): GC_EXPLICIT freed 75K, 52% free 2908K/5959K, external 4984K/5293K, paused 65ms
D/dalvikvm(  194): GC_EXPLICIT freed 292K, 52% free 2769K/5703K, external 1625K/2137K, paused 158ms
I/ActivityManager(   69): Start proc com.svox.pico for broadcast com.svox.pico/.VoiceDataInstallerReceiver: pid=334 uid=10009 gids={}
W/RecognitionManagerService(   69): no available voice recognition services found
I/ActivityThread(  334): Pub com.svox.pico.providers.SettingsProvider: com.svox.pico.providers.SettingsProvider
D/dalvikvm(   69): GC_EXPLICIT freed 445K, 49% free 4242K/8199K, external 4373K/5573K, paused 80ms
I/installd(   35): unlink /data/dalvik-cache/data@app@com.apps.objectdetection-1.apk@classes.dex
D/AndroidRuntime(  240): Shutting down VM
D/dalvikvm(  240): GC_CONCURRENT freed 100K, 72% free 293K/1024K, external 0K/0K, paused 3ms+1ms
D/jdwp    (  240): adbd disconnected
I/AndroidRuntime(  240): NOTE: attach of thread 'Binder Thread #3' failed
D/AndroidRuntime(  347): 
D/AndroidRuntime(  347): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
D/AndroidRuntime(  347): CheckJNI is ON
D/AndroidRuntime(  347): Calling main entry com.android.commands.am.Am
I/ActivityManager(   69): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10000000 cmp=com.apps.objectdetection/.ObjectDetection } from pid 347
I/ActivityManager(   69): Start proc com.apps.objectdetection for activity com.apps.objectdetection/.ObjectDetection: pid=355 uid=10036 gids={1006, 1015}
D/AndroidRuntime(  347): Shutting down VM
D/dalvikvm(  347): GC_CONCURRENT freed 101K, 69% free 318K/1024K, external 0K/0K, paused 2ms+1ms
D/jdwp    (  347): adbd disconnected
I/AndroidRuntime(  347): NOTE: attach of thread 'Binder Thread #3' failed
E/TAG     (  355): OD onCraete called!
D/CameraHardwareStub(   34): initHeapLocked: preview size=320x240
I/StagefrightPlayer(   34): setDataSource('/system/media/audio/ui/camera_click.ogg')
I/StagefrightPlayer(   34): setDataSource('/system/media/audio/ui/VideoRecord.ogg')
D/CameraHardwareStub(   34): initHeapLocked: preview size=320x240
I/ActivityManager(   69): Displayed com.apps.objectdetection/.ObjectDetection: +2s500ms (total +46s538ms)
I/ActivityManager(   69): Displayed com.android.launcher/com.android.launcher2.Launcher: +46s542ms
I/InputReader(   69): Device reconfigured: id=0x0, name=qwerty2, display size is now 480x800
I/InputManager-Callbacks(   69): No virtual keys found for device qwerty2.
I/ARMAssembler(   69): generated scanline__00000177:03515104_00001002_00000000 [ 87 ipp] (110 ins) at [0x444ea520:0x444ea6d8] in 2041001 ns
I/ARMAssembler(   69): generated scanline__00000077:03515104_00001004_00000000 [ 65 ipp] (85 ins) at [0x444ea6e0:0x444ea834] in 701000 ns
I/ARMAssembler(   69): generated scanline__00000177:03515104_00001001_00000000 [ 91 ipp] (114 ins) at [0x444ea838:0x444eaa00] in 642000 ns
E/SurfaceFlinger(   69): texture=11, using format 17, which is not supported by the GL
D/AudioSink(   34): bufferCount (4) is too small and increased to 12
E/SurfaceFlinger(   69): texture=7, using format 17, which is not supported by the GL
D/MediaScannerService(  226): start scanning volume external
V/MediaScanner(  226): pruneDeadThumbnailFiles... android.database.sqlite.SQLiteCursor@40528098
V/MediaScanner(  226): /pruneDeadThumbnailFiles... android.database.sqlite.SQLiteCursor@40528098
D/MediaScanner(  226):  prescan time: 81ms
D/MediaScanner(  226):     scan time: 53ms
D/MediaScanner(  226): postscan time: 26ms
D/MediaScanner(  226):    total time: 160ms
D/MediaScannerService(  226): done scanning volume external
E/SurfaceFlinger(   69): texture=7, using format 17, which is not supported by the GL
D/MediaScannerService(  226): start scanning volume external
D/MediaScanner(  226):  prescan time: 88ms
D/MediaScanner(  226):     scan time: 55ms
D/MediaScanner(  226): postscan time: 0ms
D/MediaScanner(  226):    total time: 143ms
D/MediaScannerService(  226): done scanning volume external
I/InputDispatcher(   69): Application is not responding: Window{4074e398 com.apps.objectdetection/com.apps.objectdetection.ObjectDetection paused=false}.  5006.2ms since event, 5005.8ms since wait started
I/WindowManager(   69): Input event dispatching timed out sending to com.apps.objectdetection/com.apps.objectdetection.ObjectDetection
I/Process (   69): Sending signal. PID: 355 SIG: 3
I/dalvikvm(  355): threadid=4: reacting to signal 3
I/dalvikvm(  355): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   69): Sending signal. PID: 69 SIG: 3
I/dalvikvm(   69): threadid=4: reacting to signal 3
I/dalvikvm(   69): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   69): Sending signal. PID: 131 SIG: 3
I/dalvikvm(  131): threadid=4: reacting to signal 3
I/dalvikvm(  131): Wrote stack traces to '/data/anr/traces.txt'
I/Process (   69): Sending signal. PID: 135 SIG: 3
I/dalvikvm(  135): threadid=4: reacting to signal 3
I/dalvikvm(  135): Wrote stack traces to '/data/anr/traces.txt'
D/dalvikvm(   69): GC_EXPLICIT freed 479K, 48% free 4310K/8199K, external 4373K/5573K, paused 130ms
I/Process (   69): Sending signal. PID: 226 SIG: 3
I/dalvikvm(  226): threadid=4: reacting to signal 3
I/dalvikvm(  226): Wrote stack traces to '/data/anr/traces.txt'
E/ActivityManager(   69): ANR in com.apps.objectdetection (com.apps.objectdetection/.ObjectDetection)
E/ActivityManager(   69): Reason: keyDispatchingTimedOut
E/ActivityManager(   69): Load: 2.06 / 1.16 / 0.44
E/ActivityManager(   69): CPU usage from 28574ms to 0ms ago:
E/ActivityManager(   69):   0.2% 41/adbd: 0% user + 0.2% kernel / faults: 64 minor
E/ActivityManager(   69):   0.1% 69/system_server: 0.1% user + 0% kernel / faults: 2 minor
E/ActivityManager(   69):   0% 131/com.android.phone: 0% user + 0% kernel / faults: 7 minor
E/ActivityManager(   69): 1.2% TOTAL: 0.4% user + 0.8% kernel + 0% softirq
E/ActivityManager(   69): CPU usage from 985ms to 1562ms later:
E/ActivityManager(   69):   14% 69/system_server: 7.1% user + 7.1% kernel / faults: 5 minor
E/ActivityManager(   69):     8.9% 103/InputDispatcher: 5.3% user + 3.5% kernel
E/ActivityManager(   69):     5.3% 70/HeapWorker: 1.7% user + 3.5% kernel
E/ActivityManager(   69):   1% 226/android.process.media: 1% user + 0% kernel
E/ActivityManager(   69):     1% 233/Binder Thread #: 1% user + 0% kernel
E/ActivityManager(   69): 17% TOTAL: 7% user + 10% kernel
I/InputDispatcher(   69): Dropping event because the pointer is not down.
D/SntpClient(   69): request time failed: java.net.SocketException: Address family not supported by protocol
I/dalvikvm(   69): Jit: resizing JitTable from 1024 to 2048
D/SntpClient(   69): request time failed: java.net.SocketException: Address family not supported by protocol
D/SntpClient(   69): request time failed: java.net.SocketException: Address family not supported by protocol
D/SntpClient(   69): request time failed: java.net.SocketException: Address family not supported by protocol
D/SntpClient(   69): request time failed: java.net.SocketException: Address family not supported by protocol
D/SntpClient(   69): request time failed: java.net.SocketException: Address family not supported by protocol

這是traces.txt的內容

----- pid 355 at 2012-02-05 23:53:50 -----
Cmd line: com.apps.objectdetection

DALVIK THREADS:
(mutexes: tll=0 tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)
"main" prio=5 tid=1 NATIVE
  | group="main" sCount=1 dsCount=0 obj=0x4001f1a8 self=0xce48
  | sysTid=355 nice=0 sched=0/0 cgrp=default handle=-1345006528
  | schedstat=( 726128083 1938849180 195 )
  at android.hardware.Camera.native_takePicture(Native Method)
  at android.hardware.Camera.takePicture(Camera.java:746)
  at android.hardware.Camera.takePicture(Camera.java:710)
  at com.apps.objectdetection.TakePictureActivity$2.onClick(TakePictureActivity.java:76)
  at android.view.View.performClick(View.java:2485)
  at android.view.View$PerformClick.run(View.java:9080)
  at android.os.Handler.handleCallback(Handler.java:587)
  at android.os.Handler.dispatchMessage(Handler.java:92)
  at android.os.Looper.loop(Looper.java:123)
  at android.app.ActivityThread.main(ActivityThread.java:3683)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:507)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
  at dalvik.system.NativeStart.main(Native Method)

"Binder Thread #2" prio=5 tid=8 NATIVE
  | group="main" sCount=1 dsCount=0 obj=0x40512758 self=0x1f8c40
  | sysTid=367 nice=0 sched=0/0 cgrp=default handle=2557464
  | schedstat=( 12951001 32247003 12 )
  at dalvik.system.NativeStart.run(Native Method)

"Binder Thread #1" prio=5 tid=7 NATIVE
  | group="main" sCount=1 dsCount=0 obj=0x405111b0 self=0x117770
  | sysTid=366 nice=0 sched=0/0 cgrp=default handle=1144624
  | schedstat=( 18285003 36422003 16 )
  at dalvik.system.NativeStart.run(Native Method)

"Compiler" daemon prio=5 tid=6 VMWAIT
  | group="system" sCount=1 dsCount=0 obj=0x4050eca8 self=0x116c00
  | sysTid=365 nice=0 sched=0/0 cgrp=default handle=1143144
  | schedstat=( 2489001 48433004 6 )
  at dalvik.system.NativeStart.run(Native Method)

"JDWP" daemon prio=5 tid=5 VMWAIT
  | group="system" sCount=1 dsCount=0 obj=0x4050ebf8 self=0x116ac8
  | sysTid=364 nice=0 sched=0/0 cgrp=default handle=580152
  | schedstat=( 22429003 84657008 23 )
  at dalvik.system.NativeStart.run(Native Method)

"Signal Catcher" daemon prio=5 tid=4 RUNNABLE
  | group="system" sCount=0 dsCount=0 obj=0x4050eb38 self=0x116fa8
  | sysTid=363 nice=0 sched=0/0 cgrp=default handle=576032
  | schedstat=( 11413002 30484003 8 )
  at dalvik.system.NativeStart.run(Native Method)

"GC" daemon prio=5 tid=3 VMWAIT
  | group="system" sCount=1 dsCount=0 obj=0x4050ea90 self=0x8d848
  | sysTid=358 nice=0 sched=0/0 cgrp=default handle=576384
  | schedstat=( 723000 9093001 2 )
  at dalvik.system.NativeStart.run(Native Method)

"HeapWorker" daemon prio=5 tid=2 VMWAIT
  | group="system" sCount=1 dsCount=0 obj=0x4050e9d8 self=0x1165f0
  | sysTid=357 nice=0 sched=0/0 cgrp=default handle=969568
  | schedstat=( 77777007 532447054 23 )
  at dalvik.system.NativeStart.run(Native Method)

----- end 355 -----

一旦我在真實手機上部署了該應用程序,該錯誤就消失了。 這似乎是模擬器的問題。

嘗試使用此代碼。.i用於消除VM關閉的問題。您可以設置解碼方法,以設置存儲或使用的圖像大小。沒有比這更多的幫助了...

public class UploadImage extends Activity {

Bitmap _bitmap;
File imgFile;
Uri selectedImageUri;
private String filePath;


/** Called when the activity is first created. */

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.uploadimage);

    imgFile = new File(path);
    // String name=imgFile.
    if (imgFile.exists()) {

        selectedImageUri =Upload.selectedUri;
        Log.d("uriiiiiiiiiiiii", "uriiiiiiiiiiiiiiiii"+selectedImageUri);
     filePath = null;

        try {
            // OI FILE Manager
            String filemanagerstring = selectedImageUri.getPath();
            Log.d("uriiiiiiiiiiiii", "uriiiiiiiiiiiiiiiii"+filemanagerstring);
            // MEDIA GALLERY
            String selectedImagePath = getPath(selectedImageUri);
            Log.d("uriiiiiiiiiiiii", "uriiiiiiiiiiiiiiiii"+selectedImagePath);

            if (selectedImagePath != null) {
                filePath = selectedImagePath;
                Log.d("uriiiiiiiiiiiii", "uriiiiiiiiiiiiiiiii"+selectedImagePath);
            } else if (filemanagerstring != null) {
                filePath = filemanagerstring;
                Log.d("uriiiiiiiiiiiii", "uriiiiiiiiiiiiiiiii"+filePath);
            } else {
                Toast.makeText(getApplicationContext(),"Unknown path",  Toast.LENGTH_LONG).show();
                Log.e("Bitmap", "Unknown path");
            }

            if (filePath != null) {
                decodeFile(filePath);
            } else {
                _bitmap = null;
            }
        } catch (Exception e) {
            Toast.makeText(getApplicationContext(), "Internal error",
                    Toast.LENGTH_LONG).show();
            Log.e(e.getClass().getName(), e.getMessage(), e);
        }

    }


public void decodeFile(String filePath) {
    // Decode image size
    BitmapFactory.Options o = new BitmapFactory.Options();
    o.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(filePath, o);

    // The new size we want to scale to
    final int REQUIRED_SIZE = 1024;

    // Find the correct scale value. It should be the power of 2.
    int width_tmp = o.outWidth, height_tmp = o.outHeight;
    int scale = 1;
    while (true) {
        if (width_tmp < REQUIRED_SIZE && height_tmp < REQUIRED_SIZE)
            break;
        width_tmp /= 2;
        height_tmp /= 2;
        scale *= 2;
    }

    // Decode with inSampleSize
    BitmapFactory.Options o2 = new BitmapFactory.Options();
    o2.inSampleSize = scale;
    _bitmap = BitmapFactory.decodeFile(filePath, o2);



    int width = _bitmap.getWidth();
    int height = _bitmap.getHeight();

    //new width / heigth
    int newWidth = 300;
    int newHeight = 460;

    // calculate the scale
    float scaleWidth = (float) newWidth / width;
    float scaleHeight = (float) newHeight / height;

    // create a matrix for the manipulation
    Matrix matrix = new Matrix();
   // matrix.preRotate(90);//
   // matrix.postRotate(270);
    // resize the bit map
    matrix.postScale(scaleWidth, scaleHeight);

    // recreate the new Bitmap and set it back
    Bitmap resizedBitmap = Bitmap.createBitmap(_bitmap, 0, 0,width, height, matrix, true);
    _bitmap = resizedBitmap;

    Set this bitmap where you want to use..
}

public String getPath(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    if (cursor != null) {
        // HERE YOU WILL GET A NULLPOINTER IF CURSOR IS NULL
        // THIS CAN BE, IF YOU USED OI FILE MANAGER FOR PICKING THE MEDIA
        int column_index = cursor
                .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    } else
        return null;
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM