Android 分享图片到自己的AAP

本文介绍如何在Android应用中实现图片分享接收功能,包括在AndroidManifest.xml中添加必要的权限和配置,布局文件中展示图片和路径,MainActivity中处理发送过来的图片数据,并解决打包过程中的依赖冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.首先要先在AndroidManifest.xml主配置文件里添加用户权限:

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

在 里面添加下面配置:

 <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="image/png" />
    </intent-filter>

2.布局文件的代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.889"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.606" />


    <TextView
        android:id="@+id/path"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:lineSpacingExtra="2dp"
        android:scrollbars="vertical"
        android:singleLine="false"
        android:text="this is content, blablabla..."
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ImageView
    android:id="@+id/img"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    app:layout_constraintBottom_toTopOf="parent"
    app:layout_constraintEnd_toStartOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

3.MainActivity中的代码:

package com.example.myapplication;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.provider.MediaStore;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;

import java.io.File;

public class MainActivity extends AppCompatActivity {
    private static final int WRITE_PERMISSION = 0x01;
    private TextView pathTextView;
    private Uri uri ;
    private ImageView img;
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        requestWritePermission();

        pathTextView= findViewById(R.id.path);
        Intent intent = getIntent();
        String action = intent.getAction();//action
        String type = intent.getType();//类型
       if (Intent.ACTION_SEND.equals(action) && type != null) {
            uri =  intent.getParcelableExtra(Intent.EXTRA_STREAM);
            //如果是媒体类型需要从数据库获取路径
            String filePath=getRealPathFromURI(uri);
            pathTextView.setText("文件路径:"+filePath);
            //显示图片
           img =  findViewById(R.id.img);
           File file = new File(filePath);
           if (file.exists()) {
              /* File picture = new File(Environment.getExternalStorageDirectory(), "wx_camera_1561181345765.jpg");
               Uri filepath = Uri.fromFile(picture);*/
               Bitmap bm = BitmapFactory.decodeFile(filePath);
               img.setImageBitmap(bm);
           }
       }

    }

    /**
     * 动态的添加权限
     */
    private void requestWritePermission(){
        if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},WRITE_PERMISSION);
        }
    }

    /**
     * 通过Uri获取文件在本地存储的真实路径
     */
    private String getRealPathFromURI(Uri contentUri) {
        String[] data = {MediaStore.MediaColumns.DATA};
        Cursor cursor=getContentResolver().query(contentUri, data, null, null, null);
        if(cursor.moveToNext()){
            return cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DATA));
        }
        cursor.close();
        return null;
    }


}

4:再打包项目时报了一个这样的错误:
Could not resolve com.android.support:support-annotations:{strictly 26.0.0}.
在app build.gradle中添加下面配置解决问题:
configurations.all {
resolutionStrategy.force ‘com.android.support:support-annotations:27.1.1’
}
在这里插入图片描述
项目效果图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值