|
|
|
ช่วยดูให้หน่อยครับ ผมเขียนแอพตามนี้แต่ทำไหมถึงเปิดไฟล์ PDF ไม่ขึ้นครับ ท่านอาจารย์ทั้งหลายช่วยดูให้หน่อยครับ |
|
|
|
|
|
|
|
ผมได้ทำการเขียนแอพนี้ให้กับเด็กนักเรียนโรงเรียนวัด ฟรีครับ แต่ติดปัญหาตรงที่ไม่สามารถเปิดไฟล์ PDFได้ครับ กดเปิดยังไงก็ไม่ขึ้น
build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"
defaultConfig {
applicationId "com.example.pdfsmart"
minSdkVersion 23
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
/*สร้างใหม่ดึงลึง*/
implementation 'com.github.barteksc:android-pdf-viewer:2.8.2'
implementation 'com.github.kk121:File-Loader:1.2'
implementation 'com.karumi:dexter:5.0.0'
}
Code (MainActivity.ava)
package com.example.pdfsmart;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.Manifest;
import android.content.Intent;
import android.content.IntentSender;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.karumi.dexter.Dexter;
import com.karumi.dexter.MultiplePermissionsReport;
import com.karumi.dexter.PermissionToken;
import com.karumi.dexter.listener.PermissionDeniedResponse;
import com.karumi.dexter.listener.PermissionGrantedResponse;
import com.karumi.dexter.listener.PermissionRequest;
import com.karumi.dexter.listener.multi.BaseMultiplePermissionsListener;
import com.karumi.dexter.listener.single.BasePermissionListener;
import java.net.URI;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private static final int PICK_PDF_CODE = 1000;
Button btn_open_assets,btn_open_storage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Request Read & Write External Storage
Dexter.withActivity(this)
.withPermissions(Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE)
.withListener(new BaseMultiplePermissionsListener(){
@Override
public void onPermissionsChecked(MultiplePermissionsReport report) {
super.onPermissionsChecked(report);
}
@Override
public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {
super.onPermissionRationaleShouldBeShown(permissions, token);
}
}).check();
btn_open_assets = (Button)findViewById(R.id.btn_open_assets);
btn_open_storage = (Button)findViewById(R.id.btn_open_storage);
btn_open_assets.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view){
Intent intent = new Intent(MainActivity.this,ViewActivitv.class);
intent.putExtra("ViewType","assets");
startActivity(intent);
}
});
btn_open_storage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent browserPDF =new Intent(Intent.ACTION_GET_CONTENT);
browserPDF.setType("application/pdf");
browserPDF.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(Intent.createChooser(browserPDF,"Select PDF"),PICK_PDF_CODE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_PDF_CODE && requestCode == RESULT_OK && data!=null)
{
Uri selectedPDF = data.getData();
Intent intent = new Intent(MainActivity.this,ViewActivitv.class);
intent.putExtra("ViewType","storage");
intent.putExtra("FlieUri",selectedPDF.toString());
startActivity(intent);
}
}
}
Code (ViewActivitv.java)
package com.example.pdfsmart;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Canvas;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.MotionEvent;
import android.widget.Toast;
import com.github.barteksc.pdfviewer.PDFView;
import com.github.barteksc.pdfviewer.listener.OnDrawListener;
import com.github.barteksc.pdfviewer.listener.OnPageChangeListener;
import com.github.barteksc.pdfviewer.listener.OnPageErrorListener;
import com.github.barteksc.pdfviewer.listener.OnRenderListener;
import com.github.barteksc.pdfviewer.listener.OnTapListener;
public class ViewActivitv extends AppCompatActivity {
PDFView pdfView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_activitv);
pdfView = (PDFView) findViewById(R.id.pdf_viewer);
if (getIntent() !=null)
{
String viewType = getIntent().getStringExtra("ViewType");
if (viewType !=null || !TextUtils.isEmpty(viewType))
{
if (viewType.equals("asset"))
{
pdfView.fromAsset("android.pdf")
.password(null) // หากมีรหัสผ่าน
.defaultPage(0) //เปิดหน้าเริ่มต้นคุณสามารถจดจำค่านี้เพื่อเปิดจากครั้งที่แล้ว
.enableSwipe(true)
.swipeHorizontal(false)
.enableDoubletap(true)// แตะสองครั้งเพื่อซูม
.onDraw(new OnDrawListener() {
@Override
public void onLayerDrawn(Canvas canvas, float pageWidth, float pageHeight, int displayedPage) {
// เพิ่มเติมโค๊ดี่นี่ถ้าคุณต้องการทำอะไร
}
})
.onDrawAll(new OnDrawListener() {
@Override
public void onLayerDrawn(Canvas canvas, float pageWidth, float pageHeight, int displayedPage) {
//เพิ่มเติมโค๊ดี่นี่ถ้าคุณต้องการทำอะไร
}
})
.onPageError(new OnPageErrorListener() {
@Override
public void onPageError(int page, Throwable t) {
Toast.makeText(ViewActivitv.this,"เกิดข้อผิดพลาดขณะเปิดหน้า"+page,Toast.LENGTH_SHORT).show();
}
})
.onPageChange(new OnPageChangeListener() {
@Override
public void onPageChanged(int page, int pageCount) {
// เพิ่มเติมโค๊ดี่นี่ถ้าคุณต้องการทำอะไร
}
})
.onTap(new OnTapListener() {
@Override
public boolean onTap(MotionEvent e) {
return true;
}
}).onRender(new OnRenderListener() {
@Override
public void onInitiallyRendered(int nbPages, float pageWidth, float pageHeight) {
pdfView.fitToWidth();//ขนาดหน้าจอคงที่
}
})
.enableAnnotationRendering(true)
.invalidPageColor(Color.WHITE)
.load();
}
else if (viewType.equals("storage"))
{
Uri pdfFile = Uri.parse(getIntent().getStringExtra("FileUri"));
pdfView.fromUri(pdfFile)
.password(null) // หากมีรหัสผ่าน
.defaultPage(0) //เปิดหน้าเริ่มต้นคุณสามารถจดจำค่านี้เพื่อเปิดจากครั้งที่แล้ว
.enableSwipe(true)
.swipeHorizontal(false)
.enableDoubletap(true)// แตะสองครั้งเพื่อซูม
.onDraw(new OnDrawListener() {
@Override
public void onLayerDrawn(Canvas canvas, float pageWidth, float pageHeight, int displayedPage) {
// เพิ่มเติมโค๊ดี่นี่ถ้าคุณต้องการทำอะไร
}
})
.onDrawAll(new OnDrawListener() {
@Override
public void onLayerDrawn(Canvas canvas, float pageWidth, float pageHeight, int displayedPage) {
//เพิ่มเติมโค๊ดี่นี่ถ้าคุณต้องการทำอะไร
}
})
.onPageError(new OnPageErrorListener() {
@Override
public void onPageError(int page, Throwable t) {
Toast.makeText(ViewActivitv.this,"เกิดข้อผิดพลาดขณะเปิดหน้า"+page,Toast.LENGTH_SHORT).show();
}
})
.onPageChange(new OnPageChangeListener() {
@Override
public void onPageChanged(int page, int pageCount) {
// เพิ่มเติมโค๊ดี่นี่ถ้าคุณต้องการทำอะไร
}
})
.onTap(new OnTapListener() {
@Override
public boolean onTap(MotionEvent e) {
return true;
}
}).onRender(new OnRenderListener() {
@Override
public void onInitiallyRendered(int nbPages, float pageWidth, float pageHeight) {
pdfView.fitToWidth();//ขนาดหน้าจอคงที่
}
})
.enableAnnotationRendering(true)
.invalidPageColor(Color.WHITE)
.load();
}
}
}
}
}
Code (AndroidManifest.xml)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.pdfsmart">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".ViewActivitv"></activity>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Code (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<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"
tools:context=".MainActivity">
<LinearLayout
android:orientation="vertical"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:id="@+id/btn_open_assets"
android:text="Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btn_open_storage"
android:text="storage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
</RelativeLayout>
Code (activity_view_activitv.xml)
<?xml version="1.0" encoding="utf-8"?>
<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"
tools:context=".ViewActivitv">
<com.github.barteksc.pdfviewer.PDFView
android:id="@+id/pdf_viewer"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.github.barteksc.pdfviewer.PDFView>
</RelativeLayout>
Tag : Mobile, Android
|
|
|
|
|
|
Date :
2020-01-17 10:11:47 |
By :
skyblack2009 |
View :
971 |
Reply :
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แก้ที่ ViewActivity
|
|
|
|
|
Date :
2020-08-03 12:53:33 |
By :
PhrayaDev |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|