Android 手机老是显示 Damaged SD Card 手机显示2g是什么意思思

android手机将sdcard上的文件拷贝到系统目录下的方法
情况是这样的:该台Android手机不提供adb
root的权限,但又不能装破解root权限的软件,若要往Android手机的/system/和/data/分区下拷一些文件,
是否有其它方法可以将文件复制到上述的分区中?当然,手机里的文件管理器没有提供将文件从存储卡上复制到这两个分区的功能,如果有哪个Android文件管理器提供类似的功能,在此也因为不能下载安装而做罢。
幸好,发现手机有预留方法可以使/system和/data分区获得写权限,而且也可以在adb
shell里执行su命令以切换用户。能执行的su加上可写的分区,意味着该分区的杀剐均在我们的掌控之下了(如对手机内置的运营商定制软件不满,那就杀之……)。废话少说,假如要将test.mp3文件拷贝到/system/media/audio/目录下,可以按如下步骤执行:
1. 将目标文件test.mp3复制到存储卡上, /sdcard/test.mp3;
2. 打开PC机上的命令行,输入adb shell并按回车进入Android系统命令行模式;
3. 输入cd system/media/audio并回车;
4. 输入cat /sdcard/test.mp3 & test.mp3并回车。
当第4步完成后,在命令行下输入命令ls应该就能看到test.mp3文件了。当然,步骤3也可省略,在adb
shell里,直接敲入命令&cat /sdcard/test.mp3
&/system/media/audio/test.mp3效果也是一样的。
因为Andorid命令行里没有cp命令(我一直未能明白为何不将该命令集成进去?),但是有mv这一条命令,那为什么不直接输入mv
/sdcard/test.mp3
/system/meida/audio/test.mp3呢?好,那我们试一下该命令,得到答复是:“failed on
'/sdcard/test.mp3' - Cross-device
link”,也就是说mv命令不允许将存储卡中的文件复制到/system/或/data/分区中,因为两者被认为是在不同的设备上。所以步骤4采用cat命令,查一下cat的用法:cat
[选项]... [文件]...
,其作用是将[文件]或标准输入组合输出到标准输出。平常工作时偶尔会用到cat命令去显示文本文件的内容,然后又想到了重定向符'&',所以两者一结合,就自然则然地想到是否可以通过将cat的文件输出到指定位置来代替cp的功能?通过尝试发现确实可以,不过我不清楚Linux系统下cp命令的实现细节,回头去查一下看。前已叙及有了su命令及可写的分区,基本可以为所欲为了,所以曲线将文件复制到/system/或/data/分区后,如果文件权限/用户名/组不符合,就可以通过chmod和chown命令进行更改。当然,如果/system/没有写权限,那本记录所讲述的方法就不适用了。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。||||||||||||||||||
查看: 593|回复: 3
在线时间7 小时经验值19 最后登录注册时间帖子阅读权限20UID
小学生, 积分 19, 距离下一级还需 31 积分
该用户从未签到
G币23 最后登录注册时间
最近做一个附带拍照功能的android应用,一些经验分享一下,如许多开发者了解的,android手机各种相机参数不一样,手机本身分辨率不一样,虽然在代码里设置相机参数的时候,可以获取到与分辨率尺寸匹配的相机参数,但是部分手机是不支持全屏幕的参数,如小米。而最大的问题是,匹配到的参数,拍出来的图片尺寸非常大,导致程序内存溢出。
& &&&很多童鞋当然会想到将options.inSampleSize赋一个值;使Bitmap bitmap=BitmapFactory.decodeFile(file_path.options);缩小一定倍数,然而在Bitmap建立之前,你并不知道图片宽和高,所以你没办法决定到底缩放多少倍才合适,有的图片很小,甚至不需要缩放。
& &&&好了,言归正传,这里可以这么处理,先创立一个缩放了4倍的Bitmap:BitmapFactory.Options options=new BitmapFactory.Options();& &options.inSampleSize=4;&&Bitmap bitmap=BitmapFactory.decodeFile(file_path.options);&&这里多少倍可以酌情决定,一般3到4倍就可以了。这样,这个bitmap就是一个比较小的图片了。在这,就可以拿到sdcard里那张图真正大小了。int width=bitmap.getWidth()*4;int height=bitmap.getHeight()*4;
因为之前缩小了4倍,再乘以4就可以了,既然拿到真正图片大小了,剩下的逻辑就好办了吧。我设置的图片缩放大小是不超过手机分辨率。所以将options.inSampleSize=width/&&//pix为手机分辨率,这样设置的话,图片小了的话还可以放大)然后bitmap=BitmapFactory.decodeFile(file_path,options)就可以了。
& &&& 顺便做的项目叫拍拍词典,希望大家顶顶,如果碰到这个拍照内存问题,是因为这个问题最近才解决,可能您的版本不是最新的。
在线时间395 小时经验值928 最后登录注册时间帖子阅读权限70UID6356292
学士, 积分 928, 距离下一级还需 172 积分
TA的每日心情怒 11:41签到天数: 3 天[LV.2]偶尔看看I
G币3 最后登录注册时间
内容看不懂的人撸过贵地……
在线时间193 小时经验值123 最后登录注册时间帖子阅读权限40UID1766977
高中生, 积分 123, 距离下一级还需 77 积分
该用户从未签到
G币230 最后登录注册时间
感谢分享!
在线时间7 小时经验值19 最后登录注册时间帖子阅读权限20UID
小学生, 积分 19, 距离下一级还需 31 积分
该用户从未签到
G币23 最后登录注册时间
浏览过的版块
Powered by手机老是弹出
Android已经停止运行
是什么意思?
全部答案(共2个回答)
出现com.android.phone已停止可能是内置的第三方软件来电归属地引起的,若手机可开机,您可尝试如下操作:待机页面,点击“手机”-点击左下角菜单键,选...
如果是偶尔出现一次,关闭窗口就可以了,正常的,如果是不能解决的,关闭了又弹出来,那应该和"从2.3刷机到4.0"手机系统升级有关,目前Android 4.0的系...
那就只能返厂了,送售后吧
程序出错了
强行停止的程序,可以在程序管理里面再次启用。  卸载的程序可以通过回恢复出厂设置或者刷机来恢复
答: 验孕棒不显示红杠怎么回事,有人能解释一下的吗,这是哪种问题才这样的?
答: 美国苹果公司的新款手机,全触屏的智能机,在中国卖的很贵。
答: 手机购买还是找正规卖家
天猫等网站
答: 可能被设置了禁言你IP接入吧
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:12345678910111213141599167人阅读
Android(38)
最近有这样的需求,把每次统计到的数据,以txt形式保存到手机SD卡或是手机内存中,遇到一些问题,记录下来。
首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置:
  &!-- SDCard中创建与删除文件权限 --&
  &uses-permission android:name=&android.permission.MOUNT_UNMOUNT_FILESYSTEMS&/&
 &!-- 向SDCard写入数据权限 --&
 &uses-permission android:name=&android.permission.WRITE_EXTERNAL_STORAGE&/&
& 接着在使用SDcard进行读写的时候 会用到Environment类下面的几个静态方法 &:&
& & 1: getDataDirectory() 获取到Android中的data数据目录(sd卡中的data文件夹)
& & 2:getDownloadCacheDirectory() 获取到下载的缓存目录(sd卡中的download文件夹)
& & 3:getExternalStorageDirectory() 获取到外部存储的目录 一般指SDcard(/storage/sdcard0)
& & 4:getExternalStorageState() 获取外部设置的当前状态 一般指SDcard,比较常用的应该是&MEDIA_MOUNTED(SDcard存在并且可以进行读写)还有其他的一些状态,可以在文档中进行查找。
& & 5:getRootDirectory() &获取到Android Root路径
好,以下是具体操作,直接看代码:
1,判断SD卡是否存在
* 判断SDCard是否存在 [当没有外挂SD卡时,内置ROM也被识别为存在sd卡]
public static boolean isSdCardExist() {
return Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED);
2,获取SD卡根目录
* 获取SD卡根目录路径
public static String getSdCardPath() {
boolean exist = isSdCardExist();
String sdpath = &&;
if (exist) {
sdpath = Environment.getExternalStorageDirectory()
.getAbsolutePath();
sdpath = &不适用&;
3,获取默认的文件存放路径
* 获取默认的文件路径
public static String getDefaultFilePath() {
String filepath = &&;
File file = new File(Environment.getExternalStorageDirectory(),
&abc.txt&);
if (file.exists()) {
filepath = file.getAbsolutePath();
filepath = &不适用&;
4-1,使用FileInputStream读取文件
File file = new File(Environment.getExternalStorageDirectory(),
&test.txt&);
FileInputStream is = new FileInputStream(file);
byte[] b = new byte[inputStream.available()];
is.read(b);
String result = new String(b);
System.out.println(&读取成功:&+result);
} catch (Exception e) {
e.printStackTrace();
4-2,使用BufferReader读取文件
File file = new File(Environment.getExternalStorageDirectory(),
DEFAULT_FILENAME);
BufferedReader br = new BufferedReader(new FileReader(file));
String readline = &&;
StringBuffer sb = new StringBuffer();
while ((readline = br.readLine()) != null) {
System.out.println(&readline:& + readline);
sb.append(readline);
br.close();
System.out.println(&读取成功:& + sb.toString());
} catch (Exception e) {
e.printStackTrace();
httpConnection读取流保存成String数据
URL url = new URL(getForwardUrl(&/queryUserByUNorIP&));
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream is = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String readline =
while ((readline = br.readLine()) != null) {
sb.append(readline);
System.out.println(&result&+sb.toString());等效于使用ByteArrayOutputStream
InputStream is = conn.getInputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len =-1 ;
while ((len=is.read(buffer))!=-1) {
bos.write(buffer, 0, len);
is.close();
bos.close();
String result = new String(bos.toByteArray());
System.out.println(&result&+result);
5-1,使用FileOutputStream写入文件
File file = new File(Environment.getExternalStorageDirectory(),
DEFAULT_FILENAME);
FileOutputStream fos = new FileOutputStream(file);
String info = &I am a chinanese!&;
fos.write(info.getBytes());
fos.close();
System.out.println(&写入成功:&);
} catch (Exception e) {
e.printStackTrace();
5-2,使用BufferedWriter写入文件
File file = new File(Environment.getExternalStorageDirectory(),
DEFAULT_FILENAME);
//第二个参数意义是说是否以append方式添加内容
BufferedWriter bw = new BufferedWriter(new FileWriter(file, true));
String info = & hey, yoo,bitch&;
bw.write(info);
bw.flush();
System.out.println(&写入成功&);
} catch (Exception e) {
e.printStackTrace();
读取和写入我们都实现了,貌似很简单的样子,但是我们现在想每隔30秒进行一次数据整理,然后把他们写入到我们制定的txt文件中,但是我想每次都能在上一次的结尾处开始写入,这样在电脑上通过文本打开时,就能看到每一行的数据了。
这其实要求我们每一次写入数据时,都要有换行的操作符号,比如:\n,并且IO读写能以追加的方式写入到文件里。
刚开始我很笨的想到,每次写入前,先把文件读取出来并且生成一个StringBuffer,然后再append,然后再写入.....这种方式导致每次都要2次以上的IO操作,读和写。其实系统写入时就给我们自带了append方式,还是要勤看文档啊!
BufferedWriter
使用BufferedWriter,在构造BufferedWriter时,把第二个参数设为true
& & & & BufferedWriter out = new BufferedWriter(new OutputStreamWriter( &
& & & & & & & & & & new FileOutputStream(file, true))); &
& & & & &out.write(conent); &
FileWriter
构造函数中的第二个参数true表示以追加形式写文件 &
& & & & &FileWriter writer = new FileWriter(fileName, true); &
& & & & &writer.write(content); &
& & & & &writer.close();
// 打开一个随机访问文件流,按读写方式 &
RandomAccessFile randomFile = new RandomAccessFile(fileName, &rw&); &
// 文件长度,字节数 &
long fileLength = randomFile.length(); &
// 将写文件指针移到文件尾。 &
randomFile.seek(fileLength); &
randomFile.writeBytes(content); &
randomFile.close();&
问题:我在file写入时,没一次写完后,明明都添加了换行符(bw.write(&\n&)),为什么在Window的文本文档中看不到换行呢?而在EditPlus或是notepad++中就能看到换行后的效果?
BufferedWriter bw = new BufferedWriter(new FileWriter(file, true));
String info = & hey, yoo,bitch&;
bw.write(info);
bw.write(&\n&);
bw.flush();
如上代码所示,可是在windows的文本文档中:
但是在诸如notepad++或EditPlus中看到却是没问题的:
这是为什么呢?
这是windows与linux系统的编码模式不同造成的。android系统是linux内核,与windows不同。windows是采用的是DOS编码方式,所用的换行符是DOS换行符CR/LF,也就是我们俗称的\r\n,(如果不理解可以去百度一下转义字符,一般程序员会用到这些知识),而linux系统的换行符为UNIX换行符LF,也就是\n,苹果的MAC系统用的是MAC换行符CR,也就是\r,现在我想你也差不多理解了。你在android手机里建立的文档肯定用的是UNIX换行符,也就是一个\n,但是这个文档你拿到windows里用记事本打开的话,因为windows记事本是DOS换行符\r\n,所以你少了个\r,所以没法识别成换行,只能给你识别成一个小方块了,解决办法很简单,你可以用EditPlus或者UltraEdit软件打开,UltraEdit也能转换这些编码模式,转换成DOS模式就可以了。
所以,我们只需要添加:\r\n &
BufferedWriter bw = new BufferedWriter(new FileWriter(file, true));
String info = & hey, yoo,bitch&;
bw.write(info);
bw.write(&\r\n&);
bw.flush();
ok,先到这里,之后继续补充。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:3991967次
积分:14267
积分:14267
排名:第887名
原创:95篇
转载:24篇
评论:699条
(1)(1)(1)(1)(3)(2)(11)(6)(1)(7)(1)(1)(3)(2)(1)(10)(4)(6)(9)(4)(10)(1)(5)(4)(1)(3)(2)(9)(5)(1)(6)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 手机上显示hd什么意思 的文章

 

随机推荐