sweetyy、

导航

Android跨程序查看模拟机图片

Android跨程序查看模拟机图片

一、效果展示

二、实现步骤

1、activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btnLook"
        android:layout_width="150dp"
        android:layout_marginLeft="100dp"
        android:layout_height="wrap_content"
        android:text="查看图片" />

    <ListView
        android:id="@+id/imgList"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

2、items.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="5dp"
    android:orientation="vertical">

    <TextView
        android:id="@+id/txt1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        />

    <TextView
        android:id="@+id/txt2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        />
</LinearLayout>

3、dialog_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/image1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:srcCompat="@android:color/holo_purple" />
</LinearLayout>

4、MainActivity.java

package com.example.shortmessage;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity
{

    private Button btlook;
    private ListView imgList;
    ArrayList<String> names = new ArrayList<String>();
    ArrayList<String> descs = new ArrayList<String>();
    ArrayList<String> fileNames = new ArrayList<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //绑定id
        btlook = (Button) findViewById(R.id.btnLook);
        imgList = (ListView) findViewById(R.id.imgList);

        //权限处理
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
        }

        //为“查看图片”按钮设置监听
        btlook.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                //把上一次的清掉
                names.clear();
                descs.clear();
                fileNames.clear();

                Log.e("MainActivity", MediaStore.Images.Media.EXTERNAL_CONTENT_URI.toString());
                Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
                String[] columns = cursor.getColumnNames();
                for (int i = 0; i < columns.length; i++)
                    Log.e("MainActivity", columns[i]);

                while (cursor.moveToNext())
                {
                    @SuppressLint("Range") String name = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME));
                    @SuppressLint("Range") String description = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DESCRIPTION));
                    //byte[] data = cursor.getBlob(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
                    @SuppressLint("Range") String data = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
                   //上面清空了,这里重新加载
                    names.add(name);
                    descs.add(description);
                    fileNames.add(data);
                    Log.e("MainActivity", data);
                }
                List<Map<String, Object>> listItems = new ArrayList<>();
                for (int i = 0; i < names.size(); i++) {
                    HashMap<String, Object> item = new HashMap<String, Object>();
                    item.put("name", names.get(i));
                    item.put("desc", descs.get(i));
                    listItems.add(item);
                }
                SimpleAdapter adapter = new SimpleAdapter(MainActivity.this,
                        listItems, R.layout.items, new String[]{"name", "desc"}, new int[]{R.id.txt1, R.id.txt2});
                imgList.setAdapter(adapter);
            }
        });
        imgList.setOnItemClickListener(new AdapterView.OnItemClickListener()
        {
            @Override

            public void onItemClick(AdapterView<?> parent, View view, int position, long id)
            {
                View dialog_view = getLayoutInflater().inflate(R.layout.dialog_view, null);
                ImageView image1 = (ImageView) dialog_view.findViewById(R.id.image1);
                image1.setImageBitmap(BitmapFactory.decodeFile(fileNames.get(position)));
                new AlertDialog.Builder(MainActivity.this).setView(dialog_view).setPositiveButton("确定", null).show();

            }
        });
    }
    @Override
    public void onRequestPermissionsResult( int requestCode, @NonNull String[] permissions, @NonNull int[] grant)
    {
        super.onRequestPermissionsResult(requestCode,permissions,grant);
    }
}

5、在AndroidManifest.xml中添加权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.shortmessage">
<!--    添加权限-->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

    <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/Theme.ShortMessage">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

附:

data,data,media 放入本机图片

posted on 2021-12-07 13:05  sweetyy、  阅读(22)  评论(0)    收藏  举报