您好我正在尝试在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);
}
});
答案 0 :(得分:0)
我的代码有问题吗?
三件事:
"@Eng_Curr/Eng_Curr.pdf"
不是Android上文件的路径,但您尝试将其与File
构造函数一起使用,就好像它是路径一样。
"@Eng_Curr/Eng_Curr.pdf"
不是MIME类型,但您将其传递到setDataAndType()
,就像它是MIME类型一样。
您没有PDF文件,而是一些资源(我假设为raw
),并且没有简单的方法可以将其转换为PDF查看应用程序。
如果您只想尝试在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;
}
}
}