I have a epub file. I need to unzip and parse the epub file and render it in Webview. Is there a step by step tutorial somewhere.
Universal Book Reader is another good option for opening EPUB files on your device. If you have the files on your Android device, here's how you can open them using Universal Book reader: Download and install the latest version of the app. Launch Universal Book Reader.
EpubReaderActivity.java
public class EpubReaderActivity extends ListActivity
{
private LayoutInflater inflater;
private List<RowData> contentDetails;
public static final String BOOK_NAME = "books/wodehouse.epub";
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
inflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
contentDetails = new ArrayList<RowData>();
AssetManager assetManager = getAssets();
try {
InputStream epubInputStream = assetManager.open(BOOK_NAME);
Book book = (new EpubReader()).readEpub(epubInputStream);
logContentsTable(book.getTableOfContents().getTocReferences(), 0);
} catch (IOException e) {
Log.e("epublib", e.getMessage());
}
CustomAdapter adapter = new CustomAdapter(this, R.layout.list,
R.id.title, contentDetails);
setListAdapter(adapter);
getListView().setTextFilterEnabled(true);
}
private class CustomAdapter extends ArrayAdapter<RowData>{
public CustomAdapter(Context context, int resource,
int textViewResourceId, List<RowData> objects) {
super(context, resource, textViewResourceId, objects);
}
private class ViewHolder{
private View row;
private TextView titleHolder = null;
public ViewHolder(View row) {
super();
this.row = row;
}
public TextView getTitle() {
if(null == titleHolder)
titleHolder = (TextView) row.findViewById(R.id.title);
return titleHolder;
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
TextView title = null;
RowData rowData = getItem(position);
if(null == convertView){
convertView = inflater.inflate(R.layout.list, null);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
}
holder = (ViewHolder) convertView.getTag();
title = holder.getTitle();
title.setText(rowData.getTitle());
return convertView;
}
}
private void logContentsTable(List<TOCReference> tocReferences, int depth) {
if (tocReferences == null) {
return;
}
for (TOCReference tocReference:tocReferences) {
StringBuilder tocString = new StringBuilder();
for (int i = 0; i < depth; i++) {
tocString.append("\t");
}
tocString.append(tocReference.getTitle());
RowData row = new RowData();
row.setTitle(tocString.toString());
row.setResource(tocReference.getResource());
contentDetails.add(row);
logContentsTable(tocReference.getChildren(), depth + 1);
}
}
private class RowData{
private String title;
private Resource resource;
public RowData() {
super();
}
public String getTitle() {
return title;
}
public Resource getResource() {
return resource;
}
public void setTitle(String title) {
this.title = title;
}
public void setResource(Resource resource) {
this.resource = resource;
}
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
RowData rowData = contentDetails.get(position);
Intent intent = new Intent(MicroEpubReaderActivity.this, ContentViewActivity.class);
intent.putExtra("display", new String(rowData.getResource().getData()));
startActivity(intent);
}
}
ContentViewActivity.java
public class ContentViewActivity extends Activity {
WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.content);
webView = (WebView) findViewById(R.id.webview);
webView.getSettings().setJavaScriptEnabled(true);
String displayString = getIntent().getExtras().getString("display");
if(displayString != null)
webView.loadData(displayString, "text/html", "utf-8");
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With