app开发者平台在数字化时代的重要性与发展趋势解析
663
2022-10-27
IDEA向安卓模拟器SD卡中导入文件
<-------个人网站传送门------->
个人开发环境: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文件的
此时如果运行项目还是会出现如下情况,很明显的错误提醒,没有访问权限。
可是前面不是刚加了访问权限嘛,怎么还提示没有。
仔细看书才发现是Android版本的问题,在Android6.0以后的版本加了新的保护权限,需要 动态获取权限。
代码如下:
private void setRegist() //动态获取权限{ //android 6.0新特性,一些保护权限, //如,文件读写除了要在AndroidManifest中申明权限,还需要进行动态获取if(Build.VERSION.SDK_INT>=23){//大于23指android6.0以后的版本。 int REQUEST_CODE_CONTACT=101; final int REQUEST_EXTERNAL_STORAGE=1; String[] PERMISSIONS_STORAGE = { "android.permission.READ_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE"}; //验证是否许可权限for(String str:PERMISSIONS_STORAGE){ if(this.checkSelfPermission(str)!= PackageManager.PERMISSION_GRANTED) { this.requestPermissions(PERMISSIONS_STORAGE, REQUEST_CODE_CONTACT); return; } } } }
上述方法写在MainActivity中即可,在onCreate方法中调用即可。
这样在运行时会弹出如下的权限请求,ALLOW即可。
机智的解决上述问题,除了动态请求权限。也可以打开模拟器的设置,在里面找到APP相关设置,然后给予该APP访问权限。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~