1

私はカメラから写真を撮ろうとします、そして私は私が以下に書いた方法two filesの助けを借りて別の活動でここで作成されたこれらにアクセスしようとしfileProvider()ています、しかし私の悪いことにそれは私に受信ポイントで常にヌルを示します。ここで作成されたさまざまなアクティビティのファイルにアクセスする方法を教えてもらえますか?

  public class FileGenerator extends Activity {
        File image1,image2,image3,image4;
        private String imagePath1,imagePath2,imagePath3,imagePath4;

        ....................
       .........................

    public void cameraShot() // This method would be called when the user clicks on a button on my activity to make a request of taking pic.
        {

                ContentValues values = new ContentValues();
                Intent intentPicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                //startActivityForResult(intentPicture,ACTION_TAKE_PICTURE);

                Intent intent=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

                if(flipvalue == 0)
                {
                    intentPicture.putExtra(MediaStore.EXTRA_OUTPUT, firstCapturedImageURI);
                    values.put(MediaStore.Images.Media.TITLE, "testingimage1.jpg");
                    firstCapturedImageURI = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
                    startActivityForResult(intentPicture,CAMERA_DATA_FIRST);
                }

                if(flipvalue == 1)
                {
                    intentPicture.putExtra(MediaStore.EXTRA_OUTPUT, secondCapturedImageURI);
                    values.put(MediaStore.Images.Media.TITLE, "testingimage2.jpg");
                    secondCapturedImageURI = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
                    startActivityForResult(intentPicture,CAMERA_DATA_SECOND);


                }
    }

    protected void onActivityResult(int requestCode, int resultCode,Intent data)
        {
            super.onActivityResult(requestCode, resultCode, data);

            if(resultCode==RESULT_OK)
            {
                Bundle extras= data.getExtras();

                if(requestCode == 0)
                {
                    if(bitMap1 != null)
                    bitMap1.recycle();
                    bitMap1 = (Bitmap)extras.get("data");
                    imageView1.setImageBitmap(bitMap1);

                    selectedImagePath1 = getRealPathFromURI(firstCapturedImageURI);

                    imagePath1 = selectedImagePath1;
                    Log.d("Pic Path>>>", selectedImagePath1);

                    image1 = new File(selectedImagePath1);

                    flipvalue =1;

                }
                           if (requestCode == 1)
                {
                    if(bitMap2 != null)
                    bitMap2.recycle();
                    bitMap2 = (Bitmap)extras.get("data");
                    imageView2.setImageBitmap(bitMap2);

                    selectedImagePath2 = getRealPathFromURI(secondCapturedImageURI);

                    imagePath2 = selectedImagePath2;
                    Log.d("Pic Path>>>", selectedImagePath2);
                    image2 = new File(selectedImagePath2);

                    flipvalue =2;

                }
    }

protected File fileProvider(int i)
    {
        if(i==1)
        return image1;
        else
        return image2;


    }

public String getRealPathFromURI(Uri contentUri)
    {
        try
        {
            String[] proj = {MediaStore.Images.Media.DATA};
            Cursor cursor = getContentResolver().query(contentUri, proj, null, null, null);
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        }
        catch (Exception e)
        {
            return contentUri.getPath();
        }
    }
}

以下は、これらのファイルを受信しようとするアクティビティです。

public class FileReceiver extends Activity{
File receivedimage1, receivedimage2;
FileGenerator filegen = new FileGenerator();
               ..........................
                   ............................

           receivedimage1 = filegen.fileProvider(1);
            Log.d("File 1 ","file1 object"+receivedimage1);// always shows null

            receivedimage2 = filegen.fileProvider(2);
             Log.d("File 2 ","file2 object"+receivedimage2);// shows null

}

PS-これを試す前に、私は文字列(つまりselectedImagePath1, selectedImagePath2)を別のアクティビティに移動し、これらの文字列を使用してファイルを作成していました。しかし、なぜこれが私が作成した私の画像ファイルを破壊するのか分かりません。それで、私は上記のコードの方法に従いましたが、それでも運がありません。

4

1 に答える 1

1

他のアクティビティにファイルパスを送信するにはインテントを使用する必要があります。2つ以上のアクティビティがある場合は、SharedPreferences for Stroring files pathを使用し、SharedPreferencesから他のアクティビティのパスを取得します。SharedPreferencesにパスを次のように保存できます。

 SharedPreferences pathPrefs = FileGenerator.this.getSharedPreferences(
                                             "filepathPrefs", MODE_WORLD_READABLE);
        SharedPreferences.Editor prefsEditor = pathPrefs.edit();
        prefsEditor.putString("image1",image1.getAbsolutePath().toString());
        prefsEditor.putString("image2",image2.getAbsolutePath().toString());
        prefsEditor.commit();

他のアクティビティでは、SharedPreferencesから次のようにファイルパスを取得します。

SharedPreferences pathPrefs = 
                   this.getSharedPreferences("filepathPrefs", MODE_WORLD_READABLE);
String image1 = pathPrefs.getString("image1", "defaultpath");
String image2 = pathPrefs.getString("image2", "defaultpath");
// now use both file path in your code..
于 2013-02-06T12:44:15.960 に答える