2016-08-06 15 views
0

私はassestsフォルダからpdfファイルを開くアプリを作りましたが、正しく動作していますが、ファイルは内部ストレージに作成されています。 ルートフォルダーに保存してユーザーに表示されないようにする方法はありますか?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

root以外のデバイスでは、アプリ内の内部フォルダはユーザーに表示されません(アプリケーション自体にのみ)。したがって、あなたの問題はすでに解決されています... BTW:ルートフォルダは、各アプリケーションごとに表示されます。ほとんどのアプリは、デフォルトでは表示しません。 – Robert

+0

ファイルがストレージ/エミュレート/ 0で作成されたことを意味します。 – varun

答えて

0

不可能です。 rootにアクセスすることはできません。

暗号化と復号化を使用することで、要件を満たすことができます。

ファイルを暗号化し、内部のストレージに保存して、アプリケーション内の読み取りで解読します。あなたは完了します。

侵入者がファイルを内部ストレージからコピーすると、そのファイルを復号化できなくなります。

+0

データ/データ/ com.something /ファイルにファイルを作成できます。 – varun

関連する問題