【问题标题】:Error Loading image from asset folder through Implicit Intent by using Phone's Image viewer使用电话的图像查看器通过隐式意图从资产文件夹加载图像时出错
【发布时间】:2013-04-10 23:46:10
【问题描述】:

我正在尝试使用隐式 Intent 通过手机的相机图像查看器应用程序显示不同的伦敦地铁地图。我在 asset 文件夹中有 tube_map.gif 图像文件,但是当我尝试加载此文件时,应用显示 无法找到项目。我认为我指定的文件路径不正确。我已经关注了以下视频。唯一的区别是,在视频中,图像文件存储在手机的 SD 卡中,而在我的情况下,它存储在资产文件夹中。 Video can be seen by this link。我的代码如下:

package uk.ac.kingston.mobileTechnology.k1059045.trainCountdown;

import java.io.File;

import uk.ac.kingston.mobileTechnology.k1059045.trainCountdown.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.webkit.WebView;
import android.widget.ImageView;
import android.widget.Toast;

public class ViewTubeMap extends Activity{

String[] maps = {"TUBE","NATIONAL RAIL","OVERGROUND","DLR","TRAMLINK","RIVER BUS","TOURISTS (Tube Map)","TOURISTS (Bus Map)","RAIL CONNECTIONS","TOILET FACILITIES"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.tube_map_layout);

     AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Pick a Map");
               builder.setItems(maps, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int which) {
                   // The 'which' argument contains the index position
                   // of the selected item
                       switch(which){

                       case(0):
                           makeToast("Case 0");
                           Intent intent = new Intent();
                                   intent.setAction(android.content.Intent.ACTION_VIEW);
                           File image = new File("assets/tube_map.gif");
                           intent.setDataAndType(Uri.fromFile(image), "image/*");
                           startActivity(intent);
                           break;

                       case(1):
                           makeToast("Case 1");
                           break;
                       case(2):
                           makeToast("Case 2");
                           break;
                       case(3):
                           makeToast("Case 3");
                           break;
                       case(4):
                           makeToast("Case 4");
                           break;
                       case(5):
                           makeToast("Case 5");
                           break;
                       case(6):
                           makeToast("Case 6");
                           break;
                       case(7):
                           makeToast("Case 7");
                           break;
                       case(8):
                           makeToast("Case 8");
                           break;
                       case(9):
                           makeToast("Case 9");
                           break;
                       }
               }
        });

       builder.create();
       builder.show();
}

public void makeToast(String message) {
    Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
}
}

谁能指导我我的代码有什么问题,或者我如何访问我的图像并将其显示在手机的相机图像查看应用程序中?谢谢

【问题讨论】:

    标签: assets photoviewer android-implicit-intent


    【解决方案1】:

    assets 是应用程序的私有区域,因此,幸运的是没有其他应用程序可以访问其他应用程序的此区域。我要么通过 SD 卡(选项 1)解决问题,要么通过互联网(不是本地)提供 tubeMaps 并从那里获取图像(选项 2)。

    选项 1: 您添加访问外部存储的权限。在活动开始时,您将图像从本地资产同步到外部存储,然后稍微更改代码以传递另一个文件对象以及指向外部存储的 ACTION_VIEW 意图。

    选项 2: 您将管图上传到 Internet 上的某个位置,并提供 ACTION_VIEW 意图的 url。

    【讨论】:

    • 我已经考虑过选项 2:您提出的建议并且有效。但是我在加载三张地图时遇到了错误,因为它们的大小为 4-5mb,并且应用程序显示无法加载文件。在我的新代码中,我已将代码替换如下: case (0): Intent tube = new Intent(); tube.setAction(android.content.Intent.ACTION_VIEW); tube.setDataAndType(Uri.parse("studentnet.kingston.ac.uk/k1059045/app_map_images/…), "image/*"); startActivity(tube); break;
    • 您能否指导我(或任何有用的链接)如何应用选项 1:您已建议,因为它允许用户离线访问地图。请告诉我将图像文件从 assets 保存到 sd 卡 的步骤。谢谢
    • 请看这里:stackoverflow.com/questions/4447477/…,但是,如果您的图像大小为 5Mb(作为压缩的 JPG),我认为它们会占用太多内存来显示。我猜它不值得使用tubeMap。我仍然会将它们保留在服务器上,但使用图形编辑器(例如 gimp 或 paint.net)重新采样到更小的尺寸
    • 链接很有帮助。谢谢
    猜你喜欢
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    • 2014-01-29
    • 2016-12-28
    • 2023-04-02
    • 2019-09-13
    相关资源
    最近更新 更多