startActivityForResult does not returns anything (Image Picking from a PreferenceActivity)

匿名 (未验证) 提交于 2019-12-03 00:56:02

问题:

I have a "Select image" in a PreferenceActivity:

Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);  startActivityForResult(i, IMAGE_SELECT);  

But when I pick an image from Gallery, it does not return anything to my PreferenceActivity's onActivityResult:

@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) {      Toast.makeText(getApplicationContext(), "THIS TOAST IS NOT SHOWING",             Toast.LENGTH_LONG).show();  } 

What more I need to do? Add something to the manifest? Is it impossible?

I hope you can help me, thanks ;)

EDIT:

This is my "whole" class (omited irrelevant code):

package com.xuso.myapp;   import yuku.ambilwarna.AmbilWarnaDialog; import yuku.ambilwarna.AmbilWarnaDialog.OnAmbilWarnaListener; import android.app.Activity; import android.app.AlertDialog; import android.app.AlertDialog.Builder; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.Preference.OnPreferenceClickListener; import android.preference.PreferenceActivity; import android.provider.MediaStore; import android.view.LayoutInflater; import android.view.View; import android.widget.SeekBar; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; import android.widget.Toast;    public class Settings extends PreferenceActivity {      protected static final int NEED_RESTART = 2;     protected static final int IMAGE_SELECT = 3;     private int bg_color; //There are a lot more      private Context context = this;     private int result = RESULT_CANCELED;      private SharedPreferences sp;     private SharedPreferences.Editor editor;       Preference pref_bg_color; //There are a lot more        public void getPrefs(){          sp = getSharedPreferences("myapp_prefs", Activity.MODE_PRIVATE);         editor = sp.edit();          bg_color = sp.getInt("pref_bg_color", 0xff000000);         //... and the rest of the GETs.      }           @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         addPreferencesFromResource(R.xml.settings);           getPrefs();           //A lot of declarations of listeners when Preferences pressed         //...         //...             pref_bg_image.setOnPreferenceClickListener(new OnPreferenceClickListener() {                  @Override                 public boolean onPreferenceClick(Preference preference) {                      Intent i = new Intent(Intent.ACTION_PICK,                                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);                 startActivityForResult(i, IMAGE_SELECT);                        return false;                 }             });           //...     //...     //More and more declarations of Preferences.          }        //This is for returning results with preferences changes to the Main activity     private void getBackAndCommit()     {         Intent intent= getIntent();         setResult(result, intent);         finish();         overridePendingTransition(0, 0);     }       //Commit changes on back pressed     public void onBackPressed ()     {          getBackAndCommit();       }       @Override     protected void onActivityResult(int requestCode, int resultCode, Intent data) {         switch(requestCode) {          case IMAGE_SELECT:             if(resultCode == RESULT_OK){                   Uri selectedImage = data.getData();                 String[] filePathColumn = {MediaStore.Images.Media.DATA};                  Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);                 cursor.moveToFirst();                  int columnIndex = cursor.getColumnIndex(filePathColumn[0]);                 String filePath = cursor.getString(columnIndex);                 cursor.close();                   Bitmap yourSelectedImage = BitmapFactory.decodeFile(filePath);             }         }      }    } 

And this is my manifest:

<application android:icon="@drawable/myapp_icon" android:label="@string/app_name" >     <activity android:name=".Main"               android:label="@string/app_name"               android:theme="@android:style/Theme.NoTitleBar"               >         <intent-filter>             <action android:name="android.intent.action.MAIN" />             <category android:name="android.intent.category.LAUNCHER" />         </intent-filter>       </activity>      <activity android:name=".Settings"               android:label="@string/app_name"               >     </activity>   </application> 

回答1:

Must work, added whole class:

import android.app.Activity; import android.content.Intent; import android.os.Bundle;  public class StackOverflowAppActivity extends Activity {     private final int PICK_IMAGE = 0;      /** Called when the activity is first created. */     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);          Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);         startActivityForResult(i, PICK_IMAGE);       }      @Override     protected void onActivityResult(int requestCode, int resultCode, Intent data) {         super.onActivityResult(requestCode, resultCode, data);          switch (requestCode) {          case PICK_IMAGE:             if (resultCode == RESULT_OK) {                 // do your thing             }         }     } } 


回答2:

Replace

startActivityForResult(i, IMAGE_SELECT);   

with

getActivity().startActivityForResult(i, IMAGE_SELECT);  

and voila!!



回答3:

Use the below code .. probably this can solve your problem.

protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {          super.onActivityResult(requestCode, resultCode, imageReturnedIntent);           switch(requestCode) {          case REQ_CODE_PICK_IMAGE:             if(resultCode == RESULT_OK){                   Uri selectedImage = imageReturnedIntent.getData();                 String[] filePathColumn = {MediaStore.Images.Media.DATA};                  Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);                 cursor.moveToFirst();                  int columnIndex = cursor.getColumnIndex(filePathColumn[0]);                 String filePath = cursor.getString(columnIndex);                 cursor.close();                   Bitmap yourSelectedImage = BitmapFactory.decodeFile(filePath);             }         }     } 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!