Android编程 打开本地文件 文件选择器

Android编程 打开本地文件 文件选择器,第1张

布局文件

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 

    android:orientation="vertical" 

    android:layout_width="fill_parent" 

    android:layout_height="fill_parent" 

    > 

<TextView   

    android:layout_width="fill_parent"  

    android:layout_height="wrap_content"  

    android:text="@string/hello" 

    /> 

   <Button  

        android:id="@+id/b01" 

        android:layout_width="fill_parent"  

        android:layout_height="wrap_content"  

    /> 

    <ImageView 

        android:id="@+id/iv01" 

        android:layout_width="fill_parent"  

        android:layout_height="wrap_content"  

     /> 

</LinearLayout>

代码

import java.io.FileNotFoundException 

import android.app.Activity 

import android.content.ContentResolver 

import android.content.Intent 

import android.graphics.Bitmap 

import android.graphics.BitmapFactory 

import android.net.Uri 

import android.os.Bundle 

import android.util.Log 

import android.view.View 

import android.widget.Button 

import android.widget.ImageView 

public class Lesson_01_Pic extends Activity { 

    /** Called when the activity is first created. */ 

    @Override 

    public void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState) 

        setContentView(R.layout.main) 

             

        Button button = (Button)findViewById(R.id.b01) 

        button.setText("选择图片") 

        button.setOnClickListener(new Button.OnClickListener(){ 

            @Override 

            public void onClick(View v) { 

                Intent intent = new Intent() 

                /* 开启Pictures画面Type设定为image */ 

                intent.setType("image/*") 

                /* 使用Intent.ACTION_GET_CONTENT这个Action */ 

                intent.setAction(Intent.ACTION_GET_CONTENT)  

                /* 取得相片后返回本画面 */ 

                startActivityForResult(intent, 1) 

            } 

                 

        }) 

    } 

         

    @Override 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

        if (resultCode == RESULT_OK) { 

            Uri uri = data.getData() 

            Log.e("uri", uri.toString()) 

            ContentResolver cr = this.getContentResolver() 

            try { 

                Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri)) 

                ImageView imageView = (ImageView) findViewById(R.id.iv01) 

                /* 将Bitmap设定到ImageView */ 

                imageView.setImageBitmap(bitmap) 

            } catch (FileNotFoundException e) { 

                Log.e("Exception", e.getMessage(),e) 

            } 

        } 

        super.onActivityResult(requestCode, resultCode, data) 

    } 

}

如果你想要在Android设备上调用系统文件管理器,只选择文件夹而不是文件,可以尝试以下步骤:

1. 首先,在你的应用中创建一个Intent对象

2. 设置Intent的Action为ACTION_OPEN_DOCUMENT_TREE,这样系统会打开一个文件目录选择器。

3. 调用startActivityForResult方法,并传入Intent对象和一个请求码。

4. 在onActivityResult方法中,检查请求码和返回结果是否正确,并从返回的Intent对象中获取所选文件夹的URI。

5. 使用getContentResolver().takePersistableUriPermission方法授予应用访问选定目录的权限,以便你可以在不重新授权的情况下访问该目录。

在使用这种方法时,需要注意的是,一些Android设备可能不支持ACTION_OPEN_DOCUMENT_TREE这个Action,因此你需要在使用之前检查设备的兼容性。另外,获取到的是URI而不是绝对路径,如果需要使用绝对路径,可以使用DocumentFile.fromTreeUri方法将URI转换为文件夹对象,再通过DocumentFile对象获取绝对路径。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11909785.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存