android - studio - no puedo abrir archivos pdf en mi celular
¿Cómo abrir/mostrar documentos(.pdf,.doc) sin una aplicación externa? (4)
Quiero crear un programa que abra documentos sin una aplicación externa. Necesito esto, porque quiero desplazar el documento con la orientación de los teléfonos (Pitch and Roll). Creo un botón en la parte inferior de la pantalla y cuando mantengo presionado el botón, también puedo desplazar el documento. Si suelto el botón, no puedo desplazarlo. Por lo tanto, si abro el documento con una aplicación externa, mi botón desaparece y el sensorManager no funciona.
Tener a alguien alguna idea para resolver este problema. ¿O alguien tiene alguna idea, cómo desplazar el documento, abrirlo en una aplicación externa, con la orientación de mis teléfonos?
(Lo siento por mi ingles)
Este es mi manifiesto:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.orientationscrolling"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.orientationscrolling.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Este es mi diseño:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<WebView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webView1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom"
android:orientation="vertical" >
<Button
android:id="@+id/mybutt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25sp"
android:text="Scroll!!"
android:layout_gravity="right"/>
</LinearLayout>
Este es mi código:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
button = (Button) findViewById( R.id.mybutt );
String pdf = "http://www.pc-hardware.hu/PDF/konfig.pdf";
String doc="<iframe src=''http://docs.google.com/gview?embedded=true&url=http://www.pc-hardware.hu/PDF/konfig.pdf'' width=''100%'' height=''100%'' style=''border: none;''></iframe>";
webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setPluginsEnabled(true);
webView.getSettings().setAllowFileAccess(true);
webView.loadData( doc , "text/html", "UTF-8");
}
Bueno, creo que a continuación está la solución.
String doc="<iframe src=''http://docs.google.com/viewer?url=http://www.example.com/yourfile.pdf&embedded=true'' width=''100%'' height=''100%'' style=''border: none;''></iframe>";
WebView wv = (WebView)findViewById(R.id.wv);
wv.setVisibility(WebView.VISIBLE);
wv.getSettings().setJavaScriptEnabled(true);
wv.getSettings().setAllowFileAccess(true);
wv.getSettings().setPluginState(WebSettings.PluginState.ON);
wv.setWebViewClient(new Callback());
wv.loadData(doc, "text/html", "UTF-8");
Espero que esto te ayude :)
Creo que deberías usar una biblioteca personalizada para hacer eso. Mira this y this
Pero hay una manera de mostrar PDF sin llamar a otra aplicación
Esta es una forma de mostrar PDF en una aplicación de Android que incrusta el documento PDF en Android Webview utilizando el soporte de http://docs.google.com/viewer
seudo
String doc="<iframe src=''http://docs.google.com/viewer?url=+location to your PDF File+''
width=''100%'' height=''100%''
style=''border: none;''></iframe>";
a continuación se muestra una muestra
String doc="<iframe src=''http://docs.google.com/viewer?url=http://www.iasted.org/conferences/formatting/presentations-tips.ppt&embedded=true''
width=''100%'' height=''100%''
style=''border: none;''></iframe>";
Código
WebView wv = (WebView)findViewById(R.id.webView);
wv.getSettings().setJavaScriptEnabled(true);
wv.getSettings().setPluginsEnabled(true);
wv.getSettings().setAllowFileAccess(true);
wv.loadUrl(doc);
//wv.loadData( doc, "text/html", "UTF-8");
y en el manifiesto proporcionar
<uses-permission android:name="android.permission.INTERNET"/>
Ver this
Precaución: no tengo conocimiento de problemas de compatibilidad con varias versiones de Android
En este enfoque, el inconveniente es que necesita conectividad a Internet. Pero creo que satisface tu necesidad.
EDITAR Probar esto como src para iframe
src="http://docs.google.com/gview?embedded=true&url=http://www.pc-hardware.hu/PDF/konfig.pdf"
intente wv.loadData( doc , "text/html", "UTF-8");
. Ambos trabajan para mi
Descargue el código fuente desde aquí ( Mostrar archivo PDF dentro de mi aplicación de Android )
Agregue esta dependencia en su grado:
compile ''com.github.barteksc:android-pdf-viewer:2.0.3''
activity_main.xml
<RelativeLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
xmlns:android="http://schemas.android.com/apk/res/android" >
<TextView
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@color/colorPrimaryDark"
android:text="View PDF"
android:textColor="#ffffff"
android:id="@+id/tv_header"
android:textSize="18dp"
android:gravity="center"></TextView>
<com.github.barteksc.pdfviewer.PDFView
android:id="@+id/pdfView"
android:layout_below="@+id/tv_header"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
MainActivity.java
package pdfviewer.pdfviewer;
import android.app.Activity;
import android.database.Cursor;
import android.net.Uri;
import android.provider.OpenableColumns;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import com.github.barteksc.pdfviewer.PDFView;
import com.github.barteksc.pdfviewer.listener.OnLoadCompleteListener;
import com.github.barteksc.pdfviewer.listener.OnPageChangeListener;
import com.github.barteksc.pdfviewer.scroll.DefaultScrollHandle;
import com.shockwave.pdfium.PdfDocument;
import java.util.List;
public class MainActivity extends Activity implements OnPageChangeListener,OnLoadCompleteListener{
private static final String TAG = MainActivity.class.getSimpleName();
public static final String SAMPLE_FILE = "android_tutorial.pdf";
PDFView pdfView;
Integer pageNumber = 0;
String pdfFileName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pdfView= (PDFView)findViewById(R.id.pdfView);
displayFromAsset(SAMPLE_FILE);
}
private void displayFromAsset(String assetFileName) {
pdfFileName = assetFileName;
pdfView.fromAsset(SAMPLE_FILE)
.defaultPage(pageNumber)
.enableSwipe(true)
.swipeHorizontal(false)
.onPageChange(this)
.enableAnnotationRendering(true)
.onLoad(this)
.scrollHandle(new DefaultScrollHandle(this))
.load();
}
@Override
public void onPageChanged(int page, int pageCount) {
pageNumber = page;
setTitle(String.format("%s %s / %s", pdfFileName, page + 1, pageCount));
}
@Override
public void loadComplete(int nbPages) {
PdfDocument.Meta meta = pdfView.getDocumentMeta();
printBookmarksTree(pdfView.getTableOfContents(), "-");
}
public void printBookmarksTree(List<PdfDocument.Bookmark> tree, String sep) {
for (PdfDocument.Bookmark b : tree) {
Log.e(TAG, String.format("%s %s, p %d", sep, b.getTitle(), b.getPageIdx()));
if (b.hasChildren()) {
printBookmarksTree(b.getChildren(), sep + "-");
}
}
}
}
¡Gracias!
Las respuestas anteriores que dependen de Google Docs solo funcionarán cuando tenga conexión a Internet. Una mejor opción sería utilizar la clase Android PdfRenderer .
Puedes probar la aplicación de muestra here .