基本上我已经右键单击了我的项目名称并成功创建了一个名为pdfs的新文件夹。我想在这里预先加载一些pdf文件,那么如何从我的mainactivity类调用这个path / somepdffile.pdf;
import java.io.File;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class FullscreenActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fullscreen);
Button button = (Button) findViewById(R.id.bPressMe);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
File pdfFile = new File(Environment
.getExternalStorageDirectory(), "pdfs/2pg.pdf");
try {
if (pdfFile.exists()) {
Uri path = Uri.fromFile(pdfFile);
Intent objIntent = new Intent(Intent.ACTION_VIEW);
objIntent.setDataAndType(path, "application/pdf");
objIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(objIntent);
} else {
Toast.makeText(FullscreenActivity.this, "File NotFound",
Toast.LENGTH_SHORT).show();
}
} catch (ActivityNotFoundException e) {
Toast.makeText(FullscreenActivity.this,
"No Viewer Application Found", Toast.LENGTH_SHORT)
.show();
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
答案 0 :(得分:0)
最好将它们放在assets /文件夹中,这样您就可以使用AssetManager访问它们了。像这样的东西
AssetManager assetManager = getAssets();
InputStream in = null;
OutputStream out = null;
File file = new File(getFilesDir(), "name_of_pdf_file.pdf");
try
{
in = assetManager.open("name_of_pdf_file.pdf");
in.close();
in = null;
} catch (Exception e)
{
Log.e("tag", e.getMessage());
}
答案 1 :(得分:0)
如果您将PDF移至assets/
,则可以使用AssetManager
为其检索InputStream
。
如果您的目标是在第三方PDF查看器中显示它们 - 正如您的代码所示 - 那么您可以:
将资产中的PDF复制到外部存储中,在这种情况下,其余代码可以正常工作,或者
将PDF从资产复制到内部存储,然后使用FileProvider
将其发布到PDF查看器,或
使用my StreamProvider
直接从资源将PDF发布到查看器应用
FileProvider
的覆盖范围可在the Android documentation中找到。我的StreamProvider
基于Google的FileProvider
,效果相似。
答案 2 :(得分:0)
构建器将完全忽略您的新文件夹。它不会与您的应用程序一起打包并复制到任何模拟器或设备上。如果要使用应用程序打包数据,则需要使用raw或assets文件夹。后者允许子文件夹,因此您可以在那里移动pdfs文件夹。
以下是一些代码,可以将文件从assets/pdfs
移动到应用指定外部目录下的files/pdfs
。
final static String TAG = "MainActivity";
final static int BUFF_SIZE = 2048;
private void copyPdfs() {
AssetManager assetManager = getAssets();
String[] pdfs = null;
try {
pdfs = assetManager.list("pdfs");
} catch (IOException e) {
e.printStackTrace();
Log.e(TAG, "Unable to get list of PDFs!");
}
File pdfDir = new File(getExternalFilesDir(null), "pdfs");
if (!pdfDir.exists()) {
Log.d(TAG, "Creating directory " + pdfDir.getAbsolutePath());
pdfDir.mkdirs();
}
for (String pdf : pdfs) {
Log.d(TAG, "Copying " + pdf);
InputStream in = null;
OutputStream out = null;
try {
in = assetManager.open("pdfs" + File.separator + pdf);
out = new FileOutputStream(new File(pdfDir, pdf));
copyPdf(in, out);
out.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
Log.e(TAG, "Unable to copy PDF!");
}
}
}
private void copyPdf(InputStream in, OutputStream out) throws IOException {
byte[] buffer = new byte[BUFF_SIZE];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1)
out.write(buffer, 0, bytesRead);
out.flush();
}