创建一个工具来打开android平板电脑上的本地pdf文件

Create a tool to open local pdf files on android tablet

本文关键字:平板电脑 android 文件 pdf 一个 工具 创建      更新时间:2023-09-26

如果这是一个愚蠢的问题,我很抱歉,但我对这个主题的了解非常有限。我并不是要求一个完整的解决方案,我只是需要朝着正确的方向努力。

我有一个adroid平板电脑,SD卡上有很多pdf文件。现在我想制作一个工具来扫描带有文件名的条形码并打开这个pdf文件。条形码将类似于test,相应的文件将是file://sdcard/pdf/test.pdf。条形码扫描仪在扫描后进行输入,所以我只需要屏幕上的一个文本框和输入键就可以启动打开活动。我们宁愿不将这款平板电脑连接到我们的网络,这样它就没有互联网连接。

我试着为此制作一个应用程序,但由于我的android编程技能非常有限,这对我来说并不奏效。现在我正在尝试用php或javascript制作一个网络应用程序。这对我来说并不奏效,因为我在这两方面的经验也很有限。起初我想在VBA中使用MS Access工具,但由于没有Android的运行时,这个想法没有实现。

我已经在寻找解决方案,但没有找到任何可以使用的东西。

有人对我应该使用的工具有什么建议吗?也许能让我走上正确的方向。欲了解更多信息,请询问。

更新1:

现在我已经用HTML和JavaScript创建了一个网页。我的代码如下:

<!DOCTYPE html>
<html>
  <head>
    <meta content="text/html; charset=windows-1252" http-equiv="content-type">
    <script type="text/javascript">
        function clickyClick() {
          url = 'file:///mnt/sdcard/documents/instructies/' + document.getElementById("barcode").value + '.pdf'
            window.open(url, '_blank');
          document.getElementById("barcode").value = "";
        }
</script> <title>Open werkinstructie</title>
  </head>
  <body>
    <form><span style="font-weight: bold; font-family: Helvetica,Arial,sans-serif; font-size:50px;">Barcode:</span>
      <input autofocus="autofocus" style="font-size:50px" name="barcode" id="barcode"
        onkeydown="if (event.which == 13) clickyClick()" type="text"> </form>
    <br>
    <button style="height: 85px; width: 120px; font-size: 30px; font-weight:bold;"
      onclick="clickyClick()">Open</button>
  </body>
</html>

我用平板电脑上的Firefox打开了它。目前,我无法使用条形码扫描仪或回车键使其工作,但按钮可以工作。这段代码在Adobe Reader中打开文件,这正是我想要做的

更新2:MainActivity.java:

package com.example...............;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.File;

public class MainActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        final String TAG = null;
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final EditText mEditText = (EditText) findViewById(R.id.editText1);
        mEditText.setImeActionLabel("Klaar", KeyEvent.KEYCODE_ENTER);
        EditText.OnEditorActionListener exampleListener = new EditText.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId,
                                          KeyEvent event) {
                Log.d(TAG, "onEditorAction, key=" + event.getKeyCode() + " action=" + event.getAction());
                if (event.getAction() == KeyEvent.KEYCODE_ENTER) {
                    openPDF(mEditText.toString());
                    mEditText.setText("");
                }
                return true;
            }
        };
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    private void openPDF(String fileName){
        String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
        File file = new File(baseDir + File.separator + "documents/instructies/"+fileName+".pdf");
        if (file.exists()) {
            Uri path = Uri.fromFile(file);
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(path, "application/pdf");
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            try {
                startActivity(intent);
            } catch (ActivityNotFoundException e) {
                Toast.makeText(this, "No reader",
                        Toast.LENGTH_SHORT).show();
            }
        }
    }
}

更新3:MainActivity.java

package com.example..............;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.File;

public class MainActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        final String LOG_TAG = "MainActivity";
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final EditText mEditText = (EditText) findViewById(R.id.editText1);
        mEditText.setImeActionLabel("Klaar", KeyEvent.KEYCODE_ENTER);
        mEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                Log.d(LOG_TAG, "onEditorAction, key=" + event.getKeyCode() + "action =" + event.getAction());
                if (event.getAction() ==1 && event.getKeyCode() ==66) {
                    String Text = mEditText.getText().toString();
                    openPDF(Text);
                    mEditText.setText("");
                }
                return true;
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    private void openPDF(String fileName) {
        File file = new File("sdcard/documents/instructies/" + fileName + ".pdf");
        //File file = new File("sdcard/documents/instructies/0195476.pdf");
        //final String LOG_TAG_2 = "MainActivity";
        //Log.d(LOG_TAG_2, "exist = " + file.exists());
        if (file.exists()) {
            Uri path = Uri.fromFile(file);
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(path, "application/pdf");
            intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            try {
                startActivity(intent);
            } catch (ActivityNotFoundException e) {
                Toast.makeText(this, "No reader",
                        Toast.LENGTH_SHORT).show();
            }
        }
    }
}

在布局中添加EditText如下:

<EditText
    android:id="@+id/editText1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ems="10"
    >
    <requestFocus />
</EditText>

在您的活动中,将此添加到onCreate方法中:

final EditText mEditText = (EditText) findViewById(R.id.editText1);
mEditText.setImeActionLabel("Done", KeyEvent.KEYCODE_ENTER);
EditText.OnEditorActionListener exampleListener = new EditText.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId,
            KeyEvent event) {
        Log.d(TAG, "onEditorAction, key="+event.getKeyCode() + " action="+event.getAction());
        if (event.getAction() == KeyEvent.KEYCODE_ENTER) {
            openPDF(mEditText.toString());
        }
        return true;
    }
};

要打开PDF,请从市场安装PDF应用程序,并在您的活动中打开PDF如下:

private void openPDF(String fileName){
    File file = new File("/sdcard/pdf/"+fileName+".pdf");
    if (file.exists()) {
        Uri path = Uri.fromFile(file);
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(path, "application/pdf");
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        try {
            startActivity(intent);
        } catch (ActivityNotFoundException e) {
            Toast.makeText(this, "No reader",
                    Toast.LENGTH_SHORT).show();
        }
    }
}