2013-04-10 1 views
0

Я пытаюсь отобразить различные карты London Tube с помощью приложения для просмотра изображений с камеры мобильного устройства, используя неявное намерение. У меня был tube_map.gif файл изображения в актив папка, но при попытке загрузить этот файл приложение отображает не может найти товар. Я думаю, что путь к файлу, который я указываю, неверен. Я следил за следующим видео. Единственное различие заключается в том, что в видео файл изображения хранится на SD-карте телефона, а в моем случае он хранится в папке с ресурсами. Video can be seen by this link. Мой код выглядит следующим образом:Ошибка Загрузка изображения из папки с активацией через Implicit Intent с помощью средства просмотра изображений телефона

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(); 
} 
} 

может кто-нибудь, пожалуйста, руководство меня, что случилось с моим кодом или как я могу получить доступ к своему изображению и отобразить его в приложении просмотра изображения с камерой телефона? Спасибо

ответ

1

активы - это частная область приложения, поэтому к счастью никакое другое приложение не может получить доступ к этой области другого приложения. Я либо сделаю обходной путь через SD-карту (вариант 1), либо сделаю трубки доступными через Интернет (не локально) и получить изображения оттуда (вариант 2).

Вариант 1: вы добавляете разрешение на доступ к внешнему хранилищу. В начале действия вы синхронизируете изображения из локальных активов во внешнее хранилище, а затем слегка меняете свой код, чтобы передать другой объект файла вместе с намерением ACTION_VIEW, указывающим на внешнее хранилище.

Вариант 2: вы загружаете tubemaps где-то в Интернете и указываете URL-адрес намерения ACTION_VIEW.

+0

Я рассмотрел вариант 2: предложенный вами, и это сработало. Но я получаю ошибку при загрузке трех карт, так как их размер составляет 4-5 мб, а приложение отображает ** невозможно загрузить файл **. В моем новом коде я заменил свой код следующим образом: _case (0): Intent tube = new Intent(); \t \t \t \t tube.setAction (android.content.Intent.ACTION_VIEW); \t \t \t \t \t \t \t \t \t \t tube.setDataAndType ( \t \t \t \t \t \t \t Uri.parse ("http://studentnet.kingston.ac.uk/k1059045/app_map_images/tube_map.jpg"), \t \t \t \t \t \t \t "image/*"); \t \t \t \t \t стартАктивность (трубка); \t \t \t \t \t break; _ – user1938645

+0

Можете ли вы направить меня (или любую полезную ссылку), как применить вариант 1: вы предложили, так как это позволит пользователю получать доступ к картам в автономном режиме. скажите, пожалуйста, шаги, которые следует выполнить для сохранения файлов изображений из ** активов ** на ** sd card **. Спасибо – user1938645

+0

, пожалуйста, посмотрите здесь: http://stackoverflow.com/questions/4447477/android-how-to-copy-files-in-assets-to-sdcard, однако, если ваши изображения имеют размер 5 МБ (как сжатый JPG) Я думаю, что они будут отображать слишком много памяти. Наверное, это не стоит для трубки. Я бы все равно сохранил их на сервере, но перепробовал до меньшего размера с помощью графического редактора, например gimp или paint.net. – comeGetSome

 Смежные вопросы

  • Нет связанных вопросов^_^