Android: launch a custom Preference from a PreferenceActivity

前端 未结 4 865
逝去的感伤
逝去的感伤 2020-12-08 23:57

I would like to be able launch a 2nd Preference screen from my PreferenceActivity. And in the 2nd Preference screen I\'d like to use a predefined layout from xml. So, I ha

4条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-09 00:03

    You might want something similar to what I did to upload a photo from the gallery or camera.

    package com.atClass.lmt;
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.ContentValues;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.preference.PreferenceActivity;
    import android.preference.Preference;
    import android.preference.Preference.OnPreferenceClickListener;
    import android.provider.MediaStore;
    import android.util.Log;
    
    
    public class Prefs extends PreferenceActivity{
        //public static final int FLAG_ACTIVITY_CLEAR_TOP = 1;
        private static final int MEDIA_IMAGE_REQUEST_CODE = 1;
        private static final int CAMERA_IMAGE_REQUEST_CODE = 2;
        public static Uri cImageUri;
    
        public static Context cContext;
        public static Activity cActivity;
    
        @Override
        protected void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.settings);
    
            this.cContext = (Context)this;
            this.cActivity = (Activity)this;
    
            Preference customPref = (Preference) findPreference("user_display_picture");
            customPref.setOnPreferenceClickListener(
                    new OnPreferenceClickListener() {
                        public boolean onPreferenceClick(Preference preference) {
                            return imageUploadDialog();
                        }
                    });
        }
    
        protected void onStop(){
            super.onStop();
            MapTools.createMapView(false);
            Lmt.serviceBinder.serviceThread("loginDevice");
        }
    
        public boolean imageUploadDialog(){
            final CharSequence[] items = {"Take picture now","Upload from gallery"};
            AlertDialog.Builder lAlertDialog = new AlertDialog.Builder(cContext);
            lAlertDialog.setTitle("Upload action");
            lAlertDialog.setCancelable(true);
            lAlertDialog.setItems(items,
                    new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialogInterface, int i){
                    //Toast.makeText(getApplicationContext(), "Selected item: " +i,  Toast.LENGTH_SHORT).show();
                    if (i == 0){
                        attachCameraImage();
                    }
                    if (i == 1){
                        attachGalleryImage();
                    }
                }
            });
            lAlertDialog.setIcon(R.drawable.click_to_url);
            lAlertDialog.show();
            return true;
        }
    
        public void attachGalleryImage(){
            Intent getImageFromGalleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
            startActivityForResult(getImageFromGalleryIntent, MEDIA_IMAGE_REQUEST_CODE);
        }
    
        public void attachCameraImage(){
            String fileName = "testphoto.jpg";
            ContentValues values = new ContentValues();
            values.put(MediaStore.Images.Media.TITLE, fileName);
            values.put(MediaStore.Images.Media.DESCRIPTION,"Image capture by camera");
            values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
            cImageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            intent.putExtra(MediaStore.EXTRA_OUTPUT, cImageUri);
            intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
            startActivityForResult(intent, CAMERA_IMAGE_REQUEST_CODE);
        }
    
        protected final void onActivityResult(final int requestCode, final int resultCode, final Intent i) {
            Log.d(Global.TAG,"--> Received callback with:" + resultCode);
            super.onActivityResult(requestCode, resultCode, i);
            if(resultCode == RESULT_OK) {
                Log.d(Global.TAG,"--> Result OK with:" + requestCode);
                switch(requestCode) {
                case MEDIA_IMAGE_REQUEST_CODE:
                    Log.d(Global.TAG,"--> MEDIA_IMAGE_REQUEST_CODE");
                    Gui.GuiProgressDialog.showLoadingSpinner(cActivity);
                    cImageUri = i.getData();
                    if (cImageUri == null){Log.d(Global.TAG,"--> ImageURI is null!");}
                    Lmt.serviceBinder.serviceThread("uploadMemberPicture");
                    break;
                case CAMERA_IMAGE_REQUEST_CODE:
                    Log.d(Global.TAG,"--> CAMERA_IMAGE_REQUEST_CODE");
                    //cImageUri = i.getData();
                    if (cImageUri == null){Log.d(Global.TAG,"--> ImageURI is null!");}
                    Lmt.serviceBinder.serviceThread("uploadMemberPicture");
                    break;
                }
            }
        }
    }
    

提交回复
热议问题