按钮onclick查看pdf文件Android

时间:2015-01-19 19:21:25

标签: android

您好我正在尝试在Android Studio中编写一个按钮来启动pdf文件。我在" res"文件夹,我希望该按钮将调用该pdf文件。然而它一直没有找到pdf?我的代码有问题吗?

Button btn=(Button)findViewById(R.id.button1);

        btn.setOnClickListener(new View.OnClickListener()
        {
          public void onClick(View v) {
           File file = new File("@Eng_Curr/Eng_Curr.pdf");
           Intent intent = new Intent(Intent.ACTION_VIEW);
           intent.setDataAndType(Uri.fromFile(file),"@Eng_Curr/Eng_Curr.pdf");
           intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
           startActivity(intent);
            }
        });

2 个答案:

答案 0 :(得分:0)

  

我的代码有问题吗?

三件事:

  1. "@Eng_Curr/Eng_Curr.pdf"不是Android上文件的路径,但您尝试将其与File构造函数一起使用,就好像它是路径一样。

  2. "@Eng_Curr/Eng_Curr.pdf"不是MIME类型,但您将其传递到setDataAndType(),就像它是MIME类型一样。

  3. 您没有PDF文件,而是一些资源(我假设为raw),并且没有简单的方法可以将其转换为PDF查看应用程序。

  4. 如果您只想尝试在Android上玩一下,我建议您尝试使用其他应用。

    如果您确实需要提供随应用程序一起提供的PDF文件作为原始资源,则可以安排在活动开始时将其复制到内部存储中的文件(例如getFilesDir())运行,然后use FileProvider将该文件提供给第三方应用,并设置Intent以使用Uri提供的FileProvider

答案 1 :(得分:0)

嗨伙计们,在收到你们所有的建议之后,非常感谢我找到了解决这个问题的方法。我使用滑动功能在png图像和mViewFlipper之间滑动以及SwipeGestureDetector。然而,其中一个问题是内存不足。我很确定它是png文件的大小,但我可能还需要找到一种方法来在每次滑动后终止保存的实例。仍在努力,任何建议都会有所帮助。无论如何希望这段代码有所帮助。

public class English extends Activity {

    public class English extends Activity { 
    private static final int SWIPE_MIN_DISTANCE = 520;
    private static final int SWIPE_THRESHOLD_VELOCITY = 500;
    private ViewFlipper mViewFlipper;
    private Context mContext;

 private final GestureDetector detector = new GestureDetector(new SwipeGestureDetector());

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.infant_eng);
        mContext = this;
        mViewFlipper = (ViewFlipper) this.findViewById(R.id.view_flipper);




        mViewFlipper.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(final View view, final MotionEvent event) {
                detector.onTouchEvent(event);
                return true;
            }
        });
    }

    class SwipeGestureDetector extends GestureDetector.SimpleOnGestureListener {

        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            try {
                // right to left swipe
                if (e1.getX() - e2.getX()> SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(mContext, R.anim.left_in));
                    mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(mContext, R.anim.left_out));
                    mViewFlipper.showNext();
                    return true;
                } else if (e2.getX() - e1.getX()> SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    mViewFlipper.setInAnimation(AnimationUtils.loadAnimation(mContext, R.anim.right_in));
                    mViewFlipper.setOutAnimation(AnimationUtils.loadAnimation(mContext, R.anim.right_out));
                    mViewFlipper.showPrevious();
                    return true;
                }

            } catch (Exception e) {
                e.printStackTrace();
            }

            return false;
        }
    }
}