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 放入本机图片

浙公网安备 33010602011771号