PDF помогите до жевать эту тему

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
Anzik
Сообщения: 22
Зарегистрирован: 20 янв 2015, 20:06

Re: PDF помогите до жевать эту тему

Сообщение Anzik » 04 фев 2015, 10:55

Собрал новый проект за работало правда через одно место и пока только в таком виде

Код: Выделить всё

 public void OnClick(View view) {

        File sdCard = Environment.getExternalStorageDirectory();
        File dir = new File(sdCard.getAbsolutePath() + "/di");
        dir.mkdirs();
        File f = new File(dir, "dmv.pdf");
        if (!f.exists())
            try {
                InputStream in =  getAssets().open("dmv.pdf");
                OutputStream out = new FileOutputStream(f);
                byte[] buf = new byte[1024];
                int len;
                while ((len = in.read(buf)) > 0) {
                    out.write(buf, 0, len);
                }
                in.close();
                out.close();
            }
            catch (Exception e) {
                throw new RuntimeException(e);
            }
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setType("application/pdf");
        intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///assets/dmv.pdf"));
        startActivity(Intent.createChooser(intent, " выбор программы"));
    }
}
Я понимаю что так не делается но пока это самый рабочий вариант
Установлено 3 программы но на выбор даёт только 2-ве а открывает только adobe reader
В старом проекте код вообще не работает видимо глюк сейчас попробую все вариации с нуля

Код: Выделить всё

//String filename = "dmv.pdf";
        File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"/dmv.pdf");
Так то же не работает
Последний раз редактировалось Anzik 04 фев 2015, 11:28, всего редактировалось 1 раз.

Anzik
Сообщения: 22
Зарегистрирован: 20 янв 2015, 20:06

Re: PDF помогите до жевать эту тему

Сообщение Anzik » 04 фев 2015, 11:25

Еще один новый проект показал что тот самый первый вариант копирования тоже работает папка создаётся файл копирует 3 ри с лишним мб через файл менеджер открывается а вот с открытием через интент проблема

Anzik
Сообщения: 22
Зарегистрирован: 20 янв 2015, 20:06

Re: PDF помогите до жевать эту тему

Сообщение Anzik » 05 фев 2015, 11:10

Все разобрался всем спасибо

Аватара пользователя
ptaxsa
Сообщения: 10
Зарегистрирован: 30 ноя 2014, 22:24

Re: PDF помогите до жевать эту тему

Сообщение ptaxsa » 14 сен 2015, 16:54

Anzik,
выложи пожалуйста информацию
чтоб и мы посмотрели и тоже разобрались

Спасибо!

Аватара пользователя
ptaxsa
Сообщения: 10
Зарегистрирован: 30 ноя 2014, 22:24

Re: PDF помогите до жевать эту тему

Сообщение ptaxsa » 03 ноя 2015, 19:32

Понял - ответа не дождусь.
Разобрался сам, но не без помощи вышеизложенного.

Мои рабочие фрагменты:

1. копируем assets на sd карту

Код: Выделить всё

  private void copyAssets(){
		
		AssetManager assetManager=getAssets();
		
		//создание новой папки на карте
		File sdCard = Environment.getExternalStorageDirectory(); 
		File dir = new File(sdCard.getAbsolutePath() + "/моя папка"); 
		dir.mkdirs(); 
		//
		
		String[] files=null;
		
		try {
			
			files=assetManager.list("Files");
			
		} catch (Exception e) {
			// TODO: handle exception
			Log.e("Tag", e.getMessage());
		}
		
		for (String fileName : files) {
			
			System.out.println("Files=>"+fileName);
			InputStream in=null;
			OutputStream out=null;
			
		try {
			
			in=assetManager.open("Files/"+fileName);
			out=new FileOutputStream(Environment.getExternalStorageDirectory().toString()+"/"+"/моя папка"+"/"+fileName);
			copyFiles(in,out);
			in.close();
			in=null;
			out.flush();
			out.close();
			out=null;
			
		} catch (Exception e) {
			// TODO: handle exception
			Log.e("Tag", e.getMessage());
			
		}
		}
	}
	private void copyFiles(InputStream in,OutputStream out) throws IOException{
		
		byte[] buffer=new byte[1024];
		int read;
		while((read=in.read(buffer))!=-1){
			
			out.write(buffer, 0, read);
		}
		
	}
	
В данном случае обязательно нужно установить Premision в Манифесте на изменение содержания данных на карте - иначе не работает.
Материал взял здесь https://www.youtube.com/watch?v=ruoJ1dlsgfg
с 1.02 мин - показано добавление Premision

2. А так выглядит код в OnClick

Код: Выделить всё

case R.id.btn_test: 
   	final String filename = "dmv.pdf";
    	File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() +"/"+"/моя папка"+"/"+ filename);
    	Intent target = new Intent(Intent.ACTION_VIEW);
    	target.setDataAndType(Uri.fromFile(file), "application/pdf");
    	target.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
    	Intent i35 = Intent.createChooser(target, "Open File");
    	try {
    	startActivity(i35);
    	} catch (ActivityNotFoundException e) {
    	// Instruct the user to install a PDF reader here, or something
    	}  
break;   
Надеюсь кому-то пригодится!

Успехов!

Ответить