Я создал приложение, которое открывает файл 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);
}
}
Возможно использование частного внутреннего хранилища https://developer.android.com/guide/topics/data/data-storage.html#filesInternal – Lino
На ненагруженном устройстве внутренняя папка приложения-частного пользователя не отображается (только для самого приложения). Следовательно, ваша проблема уже решена ... BTW: Корневая папка видна для каждого приложения. Большинство приложений просто не показывают его по умолчанию. – Robert
Я имею в виду, что файл создан в хранилище/эмулируется/0 – varun