Почему не вызывается onActivityResult? - PullRequest
1 голос
/ 26 мая 2020

Я уже проверял решения, упомянутые здесь , но в моем приложении нет большинства из этих настроек, включая манифест. Те, которые я мог попробовать изменить, я сделал. По-прежнему не повезло.

Ниже мой код, и это часть одной из моих вкладок в TabHost. Я могу выбрать изображение из галереи, но никакие последующие инструкции не выполняются. Операторы sysout не печатаются.

Все мои переменные, за исключением Button, являются stati c. Может ли это быть проблемой?

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_message);

        int permission = ActivityCompat.checkSelfPermission(messageActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE);
        if (permission != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(
                    messageActivity.this,
                    new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                    101
            );
        }
        databaseRef = FirebaseDatabase.getInstance().getReference();
        imgStorageRef = FirebaseStorage.getInstance().getReference();
        imgRef = databaseRef.child("images");
        user = MainActivity.sendUser();
        et = findViewById(R.id.msg);
        et.setText("");
        send = findViewById(R.id.sendBtn);
        send.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent gallery = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
                startActivityForResult(gallery, PICK_IMAGE);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        System.out.println("Entered onActivityResult");
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK && requestCode == PICK_IMAGE){
            imageUri = data.getData();
            try {
                bmp = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
                bmp=bmp.copy(Bitmap.Config.ARGB_8888 , true);
                encode();
                System.out.println("Encoded");
                upload();
                System.out.println("Uploaded");
                /*Code continues...*/

            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }

Это файл манифеста:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".messageActivity"/>
        <activity android:name=".chatActivity" />
        <activity android:name=".usersActivity" />
        <activity android:name=".afterRegister" />
        <activity android:name=".activityTwo" />
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

Что удивительно, тот же самый код работает для меня во всех приложениях. Но большинство из них - это всего 2 акта. Здесь я включил его в активность TabHost, но, судя по моему поиску inte rnet, это не должно быть проблемой.

Ответы [ 3 ]

0 голосов
/ 26 мая 2020

проверьте этот код:

Intent intent = new Intent(Intent.ACTION_PICK);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(intent, PICK_IMAGE);

специально это:

MediaStore.Images.Media.EXTERNAL_CONTENT_URI
0 голосов
/ 26 мая 2020

Попробуйте выбрать:

Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, PICK_IMAGE);

Для тестирования:

Если вы используете android 6 и выше go в диспетчер приложений на устройстве, а затем go в разрешения и проверьте, включены ли они read и write.

Для реальности:

Если вы используете android 6 и выше, вы должны добавить разрешения времени выполнения вместо того, чтобы делать это вручную.

подробнее здесь

0 голосов
/ 26 мая 2020

Вы добавили необходимые разрешения в файл манифеста?

...