选择图像时,android app退出

时间:2016-01-18 06:38:12

标签: android aviary adobecreativesdk

当我选择图片时,我在没有任何通知的情况下阻止了我的应用程序退出,但是当我选择论坛照片或图库时没有崩溃。 我使用creativesdk进行照片编辑。

screnshoot

package com.lamba.selfie;

import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.widget.ImageView;

import com.aviary.android.feather.sdk.AviaryIntent;

public class MainActivity extends AppCompatActivity {
    private ImageView mResultImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mResultImageView = (ImageView) findViewById(R.id.resultImageView);


        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent,
                "Select Picture"), 0);
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            switch (requestCode) {
                case 0:
                    Uri selectedImageUri = data.getData();
                    Uri imageUri = Uri.parse(getPath(selectedImageUri));
                    Intent imageEditorIntent = new AviaryIntent.Builder(this)
                            .setData(imageUri)
                            .build();
                    startActivity(imageEditorIntent);
                /*case 1:
                    startActivityForResult(imageEditorIntent, 1);
                    Uri mImageUri = data.getData();
                    mResultImageView.setImageURI(mImageUri);
                    break;*/
            }
        }
    }

    public String getPath(Uri uri) {
        // just some safety built in
        if (uri == null) {
            // TODO perform some logging or show user feedback
            return null;
        }
        // try to retrieve the image from the media store first
        // this will only work for images selected from gallery
        String[] projection = {MediaStore.Images.Media.DATA};
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        if (cursor != null) {
            int column_index = cursor
                    .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        }
        // this is our fallback here
        return uri.getPath();


    }


}

我该如何解决?

3 个答案:

答案 0 :(得分:1)

问题的根源

您可以简化switch语句的case 0,并将selectedImageUri直接传递给AviaryIntent的{​​{1}}方法。

因此,您不需要setData()辅助方法。

示例代码

以下是基于上述代码的工作代码:

  1. 立即打开图像源选择器
  2. 在Creative SDK图像编辑器中打开所选图像
  3. 将编辑过的图像附加到getPath()
  4. 请参阅示例代码中的注释,以查找这些事情发生的位置。

    ImageView

答案 1 :(得分:1)

尝试在清单文件中的Activity上将true更改为false。



android:noHistory="true" to android:noHistory="false"




答案 2 :(得分:0)

您的代码:galleryIntent.setAction(Intent.ACTION_GET_CONTENT)

使用此:Intent GalleryIntent = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.INTERNAL_CONTENT_URI);