2016-08-06 1 views
0

Я создал приложение, которое открывает файл pdf из папки assests, он работает правильно, но файл создается во внутренней памяти. Как скрыть его для пользователя. Есть ли способ сохранить его в корневой папке, чтобы пользователь не мог его видеть.копирование pdf-файла из assest на SD-карту

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    File fileBrochure = new File(Environment.getExternalStorageDirectory()+ "/" + "abc.pdf"); 




    if (!fileBrochure.exists()) 
    { 
     Toast.makeText(this, "copying", Toast.LENGTH_SHORT).show(); 

     CopyAssetsbrochure(); 
    } 

    /** PDF reader code */ 
    File file = new File(Environment.getExternalStorageDirectory()+ "/" + "abc.pdf"); 

    Intent intent = new Intent(Intent.ACTION_VIEW); 
    intent.setDataAndType(Uri.fromFile(file),"application/pdf"); 

    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    try 
    { 

     getApplicationContext().startActivity(intent); 

    } 
    catch (ActivityNotFoundException e) 
    { 
     Toast.makeText(this, "NO Pdf Viewer", Toast.LENGTH_SHORT).show(); 
    } 
} 

private void CopyAssetsbrochure() { 
    AssetManager assetManager = getAssets(); 
    String[] files = null; 
    try 
    { 
     files = assetManager.list(""); 
    } 
    catch (IOException e) 
    { 
     Log.e("tag", e.getMessage()); 
    } 

    for(int i=0; i<files.length; i++) 
    { 
     String fStr = files[i]; 
     if(fStr.equalsIgnoreCase("abc.pdf")) 
     { 
      InputStream in = null; 
      OutputStream out = null; 
      try 
      { 
       in = assetManager.open(files[i]); 
       out = new FileOutputStream(Environment.getExternalStorageDirectory()+ "/" + files[i]); 
       copyFile(in, out); 
       in.close(); 
       in = null; 
       out.flush(); 
       out.close(); 
       out = null; 
       break; 
      } 
      catch(Exception e) 
      { 
       Log.e("tag", e.getMessage()); 
      } 
     } 
    } 
} 

private void copyFile(InputStream in, OutputStream out) throws IOException { 
    byte[] buffer = new byte[1024]; 
    int read; 
    while((read = in.read(buffer)) != -1){ 
     out.write(buffer, 0, read); 
    } 
} 
+0

Возможно использование частного внутреннего хранилища https://developer.android.com/guide/topics/data/data-storage.html#filesInternal – Lino

+0

На ненагруженном устройстве внутренняя папка приложения-частного пользователя не отображается (только для самого приложения). Следовательно, ваша проблема уже решена ... BTW: Корневая папка видна для каждого приложения. Большинство приложений просто не показывают его по умолчанию. – Robert

+0

Я имею в виду, что файл создан в хранилище/эмулируется/0 – varun

ответ

0

невозможно. вы не можете получить доступ к root.

Вы можете выполнить свое требование, используя криптографию, которая является шифрованием и расшифровкой.

Зашифруйте файл и храните его на внутренней памяти при чтении внутри приложения, расшифруйте его. Вы сделаете.

Если какой-либо нарушитель скопирует ваш файл из внутреннего хранилища, он не сможет его расшифровать.

+0

Может быть создан файл на data/data/com.something/files – varun

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