【问题标题】:Create a tool to open local pdf files on android tablet创建一个在安卓平板电脑上打开本地pdf文件的工具
【发布时间】:2015-03-05 09:44:01
【问题描述】:

如果这是一个愚蠢的问题,我很抱歉,但我在这个问题上的知识非常有限。我不是要求一个完整的解决方案,我只需要朝着正确的方向一点点推动。

我有一个 sdcard 上有很多 pdf 文件的 android 平板电脑。现在我想制作一个工具来扫描带有文件名的条形码并打开这个pdf文件。条形码类似于test,对应的文件为file://sdcard/pdf/test.pdf。 条码扫描器在扫描后会给出回车,所以我只需要屏幕上的文本框和回车键来启动打开活动。我们不想将此平板电脑连接到我们的网络,因此它没有互联网连接。

我试图为此制作一个应用程序,但由于我的 android 编程技能非常有限,这对我来说并不奏效。 现在我正在尝试使用 php 或 javascript 制作一个 web 应用程序。这对我来说并不真正有效,因为我对其中任何一个的经验也很有限。最初我在考虑 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 打开。现在我无法使用条形码扫描仪或回车键让它工作,但是按钮确实有效。此代码在 Adob​​e 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();
            }
        }
    }

}

【问题讨论】:

    标签: javascript android html pdf


    【解决方案1】:

    在您的布局中添加一个 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();
            }
        }
    }
    

    【讨论】:

    • 感谢您的回复,我们使用的是插入微型 USB 端口的真正的条码扫描器,因此不需要替代条码扫描器。此外,我没有创建应用程序的经验,所以真的不知道如何处理您的代码,对不起
    • 我已经用我的进度更新了我原来的帖子。也许你可以帮助我,或者指导我完成一个应用程序的制作(我已经完成了 hello world 教程)
    • 条形码扫描仪是否被android识别为键盘?什么型号?你有 SDK 吗?
    • 我没有SDK,条码扫描器被识别为键盘。当我扫描代表文本的条码时:test 条码扫描器会给出test + enter 作为输出。
    • 感谢您的更新,不幸的是我无法让它工作。我已将您的代码复制到我的项目中,但在 mEditText.setImeActionLabel("Done", KeyEvent.KEYCODE_ENTER); 上收到错误消息。我收到无法解析setImeActionLabel 的消息。我已经导入了Android.widget.EditText class。当我注释掉发生错误的行时,测试应用程序崩溃。
    猜你喜欢
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    相关资源
    最近更新 更多