
[code]

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        File fileBrochure = new File(Environment.getExternalStorageDirectory() + "/" + "abc.pdf");
        if (!fileBrochure.exists())
        {
             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(SecondActivity.this, "NO Pdf Viewer", Toast.LENGTH_SHORT).show();
        }
    }
    
    //method to write the PDFs file to sd card
        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);
            }
        }
    
[/code]

のようにしてもabc.pdfが開けませんとでます。どうすればいいのでしょう？


CC BY-SA 3.0
2017-03-08T03:28:05.027
33181
2017-07-18T03:05:33.013
2017-03-08T03:56:51.737
20972
question
android pdf
Androidでassets内のpdf を開きたい


ソースから2点気になりました

・RuntimePermission関連のソースがありませんが、  
ExternalStorageに保存しているので必要なはずです。  
Manifestファイルにpermissionの設定およびRuntimePermissionの許可は行っていますでしょうか？  
参考：[Android アプリ開発での Intentを使ったカメラ連携でのエラー
Permission？](https://ja.stackoverflow.com/questions/32624)

・file://スキーマでのIntent受け渡しはAndroid7.0よりできなくなっています。  
参考：<https://developer.android.com/about/versions/nougat/android-7.0-changes.html?hl=ja>  
AndroidのVersionはいくつでしょうか？

* * *

追記：  
ご提示のソースから  
RuntimePermissionの設定  
および  
file://スキーマをcontent://に変更したところpdfファイルの読み込み(他Activityへの受け渡し)ができました。

・RuntimePermissionについて  
<https://developer.android.com/training/permissions/requesting.html>

・アプリ間のファイル共有について  
<https://developer.android.com/training/secure-file-sharing/index.html>


CC BY-SA 3.0
2017-03-08T12:38:16.510
33191
2017-03-09T06:42:10.837
2017-04-13T12:52:38.920
-1
19716
33181
answer