个人开发环境:Ubuntu18.04+IDEA2019.1+Android9.0
问题起源,开发一个简单Android播放器去播放SD卡上的视频/音频文件。由于需要将文件复制到模拟器的SD卡上,课本上和网上教程是关于用Eclipse和Android Studio进行开发的,借助DDMS可以轻松实现。可是我用的IDEA找不到打开DDMS的地方,网上也没找到啥有用的信息。
这里简单归纳下解决办法:
思路:找到自己安装Android SDK的路径,进入其下的tools文件夹,用终端打开并输入montior 回车(也可直接用终端定位到此目录执行monitor),此时发现DDMS已正常启动,可以进行向SD卡导入文件的操作。(需要提前开启安卓虚拟机AVD)
注意:模拟器SD卡目录为mnt文件夹下的sdcard,选中这里点右上角的导入按钮即可向SD卡导入所需文件。
我发现导入后的文件这里好像并不能在sdcard下面看到,不过只要导入过程中控制台没有错误提醒,即说明导入成功。(也可以在安卓模拟器自带的文件管理应用中进行查看)
文件导入成功,剩下便是在代码中的引用了。
这里谈下关于文件路径的设置及访问权限的获取。
path = "/sdcard/Movies/sample.3gp";
mMediaPlayer.setDataSource(path);// 设置数据源
path值只需要填写为“/sdcard/所在文件夹/所在文件”即可。
运行项目发现还是不行,获取数据源出错。一开始以为是path设置的路径有误,后面发现是忘记加访问权限了。
在AndroidManifest.xml文件的<application>标签之前加入下面两句获取访问权限的代码
此时如果运行项目还是会出现如下情况,很明显的错误提醒,没有访问权限。
可是前面不是刚加了访问权限嘛,怎么还提示没有。
仔细看书才发现是Android版本的问题,在Android6.0以后的版本加了新的保护权限,需要 动态获取权限。
代码如下:
上述方法写在MainActivity中即可,在onCreate方法中调用即可。
这样在运行时会弹出如下的权限请求,ALLOW即可。
机智的解决上述问题,除了动态请求权限。也可以打开模拟器的设置,在里面找到APP相关设置,然后给予该APP访问权限。