www.91084.com

GVKun编程网logo

android – 从Intent.ACTION_GET_CONTENT到文件的URI(android.intent.action.get_content)

15

在本文中,我们将带你了解android–从Intent.ACTION_GET_CONTENT到文件的URI在这篇文章中,我们将为您详细介绍android–从Intent.ACTION_GET_CONT

在本文中,我们将带你了解android – 从Intent.ACTION_GET_CONTENT到文件的URI在这篇文章中,我们将为您详细介绍android – 从Intent.ACTION_GET_CONTENT到文件的URI的方方面面,并解答android.intent.action.get_content常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的Android 4.4 (KitKat) 上的 Android Gallery 为 Intent.ACTION_GET_CONTENT 返回不同的 URI、Android Intent.ACTION_SCREEN_OFF和Intent.ACTION_USER_PRESENT如何注册、android – ACTION_GET_CONTENT:搜索多种文件类型时如何获取文件结尾?、android – Content Provider中的Content_URI

本文目录一览:

android – 从Intent.ACTION_GET_CONTENT到文件的URI(android.intent.action.get_content)

android – 从Intent.ACTION_GET_CONTENT到文件的URI(android.intent.action.get_content)

>使用Intent.ACTION_GET_CONTENT启动照片选择器
>检索所选项目的URI
>检索URI的PATH,以便我可以将其发布到我的网络服务器

用于启动浏览的代码

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

用于检索所选图像的代码

if (RESULT_OK == resultCode &&
             broWSE_IMAGE_REQUEST_CODE == requestCode) {
Uri uri = data.getData();

要发送到网络服务器的代码

File file = new File(uri.getPath());
new FileSystemResourceFile(file);

我目前能够从URI中检索PATH没有prob / external / images / media / 24但是由于一些奇怪的原因,文件总是为空,请帮忙吗?

解决方法

我已经完成了这个方法,将Uri从Intent.ACTION_GET_CONTENT转换为实际路径:
public static String getRealPathFromUri(Activity activity,Uri contentUri) {
    String[] proj = { MediaStore.Images.Media.DATA };
    Cursor cursor = activity.managedQuery(contentUri,proj,null,null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.movetoFirst();
    return cursor.getString(column_index);
}

然后转换为文件:

Uri filePathFromActivity = (Uri) extras.get(Intent.EXTRA_STREAM);
filePathFromActivity = Uri.parse(FileUtil.getRealPathFromUri( (Activity) IntentActivity.this,filePathFromActivity));
File imageFile = new File(filePathFromActivity.getPath());

Android 4.4 (KitKat) 上的 Android Gallery 为 Intent.ACTION_GET_CONTENT 返回不同的 URI

在 KitKat 之前(或在新画廊之前)Intent.ACTION_GET_CONTENT返回一个这样的 URI

内容://媒体/外部/图像/媒体/3951。

使用ContentResolver和查询 MediaStore.Images.Media.DATA返回的文件 URL。

然而,在 KitKat 中,Gallery 会返回一个 URI(通过“Last”),如下所示:

内容://com.android.providers.media.documents/document/image:3951

我该如何处理?

答案1

小编典典

尝试这个:

if (Build.VERSION.SDK_INT <19){    Intent intent = new Intent();     intent.setType("image/jpeg");    intent.setAction(Intent.ACTION_GET_CONTENT);    startActivityForResult(Intent.createChooser(intent, getResources().getString(R.string.select_picture)),GALLERY_INTENT_CALLED);} else {    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);    intent.addCategory(Intent.CATEGORY_OPENABLE);    intent.setType("image/jpeg");    startActivityForResult(intent, GALLERY_KITKAT_INTENT_CALLED);}@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    if (resultCode != Activity.RESULT_OK) return;    if (null == data) return;    Uri originalUri = null;    if (requestCode == GALLERY_INTENT_CALLED) {        originalUri = data.getData();    } else if (requestCode == GALLERY_KITKAT_INTENT_CALLED) {        originalUri = data.getData();        final int takeFlags = data.getFlags()                & (Intent.FLAG_GRANT_READ_URI_PERMISSION                | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);        // Check for the freshest data.        getContentResolver().takePersistableUriPermission(originalUri, takeFlags);    }    loadSomeStreamAsynkTask(originalUri);}

大概需要

@SuppressLint(“NewApi”)

为了

获取PersistableUriPermission

Android Intent.ACTION_SCREEN_OFF和Intent.ACTION_USER_PRESENT如何注册

Android Intent.ACTION_SCREEN_OFF和Intent.ACTION_USER_PRESENT如何注册

Activity has leaked IntentReceiver ScreenReceiver that was originally registered here. Are you missing a call to unregisterReceiver()?

在我的主要活动中

 // Register receiver that handles screen on and screen off logic
 final IntentFilter intentScreenfilter = new IntentFilter(Intent.ACTION_SCREEN_ON);
 intentScreenfilter.addAction(Intent.ACTION_SCREEN_OFF);
 intentScreenfilter.addAction(Intent.ACTION_USER_PRESENT);
 screenReceiver = new ScreenReceiver();

当应用程序关闭时,我收到此消息.

ACTION_SCREEN_OFF

ACTION_SCREEN_ON 

无法在AndroidManifest中注册,只能以编程方式注册.我能做什么?我不想使用服务,因为如果服务全天运行,这对电池不利.解决办法是什么?如何使用这个接收器?

解决方法:

你不能从android清单文件注册这些接收器.它根本不支持.唯一的方法是长时间运行服务并在服务中注册这些接收器.所以,如果你真的想使用

ACTION_SCREEN_ON 

ACTION_SCREEN_OFF 

然后你必须使用服务

android – ACTION_GET_CONTENT:搜索多种文件类型时如何获取文件结尾?

android – ACTION_GET_CONTENT:搜索多种文件类型时如何获取文件结尾?

我使用Intent让用户选择一个文件,在用户完成之后我想知道所选文件是什么类型的文件类型.

意图:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");

在我的onActivityResult中,我想通过intent.getData()和它的所有“submethods”(getScheme(),getLastPathSegment()等)从intent中提取路径.但是,我只获取所选文件的Uri.

Uris’的例子:

Uri: content://media/external/audio/media/15185 //This is an audiofile
Uri: content://media/external/audio/media/20 //Another audiofile
Uri: content://media/external/images/media/20577 //this is a picture
Uri: file:///storage/emulated/0/testWed%20Apr%2017%2011%3A10%3A34%20CEST%202013 //This is a file

我已经看到了当用户只被允许选择图像或音频时如何获得绝对路径的解决方案.但是,如果我想允许用户从不同的文件类型中进行选择,我该如何获取absolutePath(具有名称和文件结尾的真实路径,例如MyPicture.jpeg)?

代码我一直在试图获取onActivityResult中的路径名(int requestCode,int resultCode)

         String fileName = data.getData().getLastPathSegment().toString();
         System.out.println("Uri: " +data.getData().toString());
         File f = new File(fileName);
         System.out.println("TrYinG wIWThA Da FiLE: " +f.getAbsolutePath());
         System.out.println("FileNAME!!!: "+fileName);
最佳答案
通过文件结尾我假设你的意思是文件扩展名? (即mp4)

如果是这样,您可以使用ContentResolver获取mimetype:

String mimeType = getContentResolver().getType(sourceUri);

这将为您提供mimetype,假设它们在MediaStore中,如果您有内容Uri,它们应该是它们.所以你会得到像“image / png”,“video / mp4”等等.

然后你可以使用MimeTypeMap从mimetype获取文件扩展名:

String extension = MimeTypeMap.getSingleton().getExtensionFromMimeType(mimeType);

请注意,您永远不应该在“/”之后对mimetype进行子字符串以获取扩展名,因为某些mimetype不使用其扩展名,例如“.mov”文件,其中包含mimetype“video / quicktime”

android – Content Provider中的Content_URI

android – Content Provider中的Content_URI

根据我的理解,Content Provider是一种访问数据库内容的方法.

要访问数据库,需要使用Authority部分.该权限部分由CONTENT_URI提供.
因此,Content_URI是一种赋予数据库权限的手段.
就CONTENT_URI而言,它通常是形式的

content://com.example.transportationprovider/trains/122
______ |____________________________________|_____ |___ 
  A                      B                     C     D
Where A = Content,B = Authority Part
      c = Path determining what data to request
      D = specific data

上面的场景是一个理想的场景,我们传递/训练作为唯一的数据库名称.
但是,如果,我有以下content_uri:

content://com.example.transportationprovider/land/bus/133

在这种情况下,/ land / bus是路径段.

但那么内部如何将这些数据存储在数据库中?
或者内容提供商如何解释这些数据?

请帮我.

解决方法

简单的答案是它存储在数据库中,无论你喜欢什么.路径中的所有内容以及下面的数据库路径的映射都由ContentProvider的编写者定义.

或多或少,您要使用的模型是数据库中每个表有一个路径.

在某些情况下,您可能需要一些额外的路径.通常,这意味着暴露数据库的一些备用“视图”…… Contacts API提供了一个很好的例子.

你为什么要强制执行这种雇用“土地/公共汽车”?为什么不只是“公共汽车”和“火车”.每个有一个sql表? sql表不是java类.他们没有继承关系,那种雇佣制并不是必要的.

今天的关于android – 从Intent.ACTION_GET_CONTENT到文件的URIandroid.intent.action.get_content的分享已经结束,谢谢您的关注,如果想了解更多关于Android 4.4 (KitKat) 上的 Android Gallery 为 Intent.ACTION_GET_CONTENT 返回不同的 URI、Android Intent.ACTION_SCREEN_OFF和Intent.ACTION_USER_PRESENT如何注册、android – ACTION_GET_CONTENT:搜索多种文件类型时如何获取文件结尾?、android – Content Provider中的Content_URI的相关知识,请在本站进行查询。

本文标签: