0

このコードを使用して、Androidアプリケーションでギャラリーを開いています。

Intent intent = new Intent(Intent.ACTION_PICK, Media.EXTERNAL_CONTENT_URI);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(intent, GALLERY);

ギャラリーを開きますが、そこから画像を選択すると、その画像も閉じますが、onActivityResultメソッドとは呼ばれません。

方法はこちら...

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


    Log.v(TAG, "requestCode = "+requestCode+" resultCode = "+resultCode);
    Log.v(TAG, "inside onActivityResult");

    if (requestCode == GALLERY || requestCode == CAMERA) {
        if (resultCode == RESULT_OK) 
        {
            Log.v(TAG, "inside onActivityResult OK ");
            Log.v("log_tag", "onactivity result: " + requestCode);
            if(requestCode == CAMERA)
            {
                Log.v(TAG, "inside onActivityResult Camera");
                 file = getTempFile(this.getParent());  
                 try {  
                    m_bmOCRBitmap = Media.getBitmap(getContentResolver(), Uri.fromFile(file) );

                    FileOutputStream out = new FileOutputStream(file);

                    int width = m_bmOCRBitmap.getWidth();
                    int height = m_bmOCRBitmap.getHeight();
                    if(width>height)
                    {
                        calwidth = (int)((width * 250)/height);
                        calheight = 250;
                    }
                    else
                    {
                        calheight = (int)((height * 200)/width);
                        calwidth = 200;
                    }

                    Log.v(TAG, "calwidth = "+calwidth+" calheight = "+calheight);
                    bitmap = Bitmap.createScaledBitmap(m_bmOCRBitmap, calwidth, calheight, true);                                                                   

                    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
                    productImage.setImageBitmap(bitmap);

                    } catch (FileNotFoundException e) {  
                      e.printStackTrace();  
                    } catch (IOException e) {  
                      e.printStackTrace();  
                    }  
            }
            else if(requestCode == GALLERY)
            {
                Log.v(TAG, "inside onActivityResult GALARY ");
                String selectedImagePath = getPath(data.getData());
                file = new File(selectedImagePath);                                     
                m_bmOCRBitmap = BitmapFactory.decodeFile(selectedImagePath);
                Log.v("log_tag", "selectedImagePath:" + selectedImagePath + ":" );
                Log.v("log", "first image : "+m_bmOCRBitmap);
                try {
                    FileOutputStream out = new FileOutputStream(file);
                    int width = m_bmOCRBitmap.getWidth();
                    int height = m_bmOCRBitmap.getHeight();
                    if(width>height)
                    {
                        calwidth = (int)((width * 250)/height);
                        calheight = 250;
                    }
                    else
                    {
                        calheight = (int)((height * 200)/width);
                        calwidth = 200;
                    }
                    bitmap = Bitmap.createScaledBitmap(m_bmOCRBitmap, calwidth, calheight, true);                                                                   

                    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
                    productImage.setImageBitmap(bitmap);

                } catch (Exception e) {
                    Log.v("log_tag", "Exception: " + e.toString());
                }
            }                           
        }
    }       
    super.onActivityResult(requestCode, resultCode, data);
}

インテントと呼ばれる間の警告は

01-04 12:21:06.434: D/PhoneWindow(367): couldn't save which view has focus because the focused view com.android.internal.policy.impl.PhoneWindow$DecorView@4054fb60 has no id.

このアクティビティは、Tabgoupアクティビティから子アクティビティとして開始したことに注意してください。

私に提案してください。ありがとう。

4

4 に答える 4

5

onActivityResult()トリガーされない可能性はたくさんあります。

  • リクエスト コードが < 0 の場合
  • android:launchMode="singleInstance"Manifest.xmlに設定している場合
  • フラグメントを使用している場合は startActivityOnResult、アクティビティの代わりにフラグメントを呼び出す必要があります
于 2013-01-04T07:18:47.570 に答える
3

このメソッドをこのように親クラスに追加しました

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    ProductImageActivity activity = (ProductImageActivity)getLocalActivityManager().getCurrentActivity();
    try {
        activity.onActivityResult(requestCode, resultCode, data,0);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

現在のクラスでは、このように新しいインテントを開始しました。

Intent intent = new Intent(Intent.ACTION_PICK, Media.EXTERNAL_CONTENT_URI);
getParent().startActivityForResult(intent, GALLERY);
于 2013-01-05T05:05:01.640 に答える
2

Intent.FLAG_ACTIVITY_NEW_TASK の動作については、http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NEW_TASK を確認してください。自主活動に利用しています。

This flag is generally used by activities that want to present a "launcher" style      behavior: they give the user a list of separate things that can be done, which otherwise run completely independently of the activity launching them.

その行を削除すると、画像が選択されると onActivityResult が呼び出されます。

    Intent intent = new Intent(Intent.ACTION_PICK, Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(intent, GALLERY);
于 2013-01-04T07:25:43.327 に答える
0

これを試して、Intent画像を取得するためにこのように使用してくださいGallery

        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType("image/*");
        startActivityForResult(intent, GALLERY);  

または

           Intent intent = new Intent(Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(intent, GALLERY);
于 2013-01-04T07:08:53.913 に答える