-
Mr.Alright---Google原生问题之格式化SD卡为内部存储后设置里内存显示会翻倍
2021-01-07 16:11:06发现了一个问题,就是当插入大小分别为128G、64G、32G、16G、8G、4G的SD卡,格式化SD卡作为内部存储后,在设置下128G的SD卡合并总容量显示256G、64G的SD卡显示128G,32G的SD卡显示32G、16G的SD卡显示32G、8G的SD卡...发现了一个问题,就是当插入大小分别为128G、64G、32G、16G、8G、4G的SD卡,格式化SD卡作为内部存储后,在设置下128G的SD卡合并总容量显示256G、64G的SD卡显示128G,32G的SD卡显示32G、16G的SD卡显示32G、8G的SD卡显示8G、4G的SD卡显示4G。
看到这问题,当即想到的就是显示问题,因为google之前计算内存的方法有的是按照1024的,有的是按照1000的,很乱,不出问题才怪,后面的9.0、10.0就好多了
不多说什么,直接上代码
/** * Round the given size of a storage device to a nice round power-of-two * value, such as 256MB or 32GB. This avoids showing weird values like * "29.5GB" in UI. * * @hide */ public static long roundStorageSize(long size) { long val = 1; long pow = 1; // Modify by HZH on 2019/12/6 start // while ((val * pow) < size) { long realpow = 1; while ((val * realpow) < size) { val <<= 1; if (val > 512) { val = 1; pow *= 1000; realpow *= 1024; } } // Modify by HZH on 2019/12/6 end return val * pow; }
按照上面修改即可,根本还是换算单位的问题
-
Android--将用户设置进行保存(内部存储、SD卡,用类作为媒介)
2019-03-06 17:49:33将用户的设置信息,以实体类为媒介,保存到内部存储或者SD卡的文件里。再次打开应用时,程序会自动调用文件中实体类,并对设置信息进行设置,使其恢复到用户最终保存的状态。 首先,创建一个实体类(这里要实现 ...将用户的设置信息,以实体类为媒介,保存到内部存储或者SD卡的文件里。再次打开应用时,程序会自动调用文件中实体类,并对设置信息进行设置,使其恢复到用户最终保存的状态。
首先,创建一个实体类(这里要实现 Serializable 接口,即序列化,这样才能让类在内存中传递):
public class SettingData implements Serializable{ private boolean titleShow; private String textSize; private boolean notify; private boolean plug; private boolean autoRead; private boolean transmit; public SettingData() { } public SettingData(boolean titleShow, String textSize, boolean notify, boolean plug, boolean autoRead, boolean transmit) { this.titleShow = titleShow; this.textSize = textSize; this.notify = notify; this.plug = plug; this.autoRead = autoRead; this.transmit = transmit; } public boolean isTransmit() { return transmit; } public void setTransmit(boolean transmit) { this.transmit = transmit; } public boolean isTitleShow() { return titleShow; } public void setTitleShow(boolean titleShow) { this.titleShow = titleShow; } public String getTextSize() { return textSize; } public void setTextSize(String textSize) { this.textSize = textSize; } public boolean isNotify() { return notify; } public void setNotify(boolean notify) { this.notify = notify; } public boolean isPlug() { return plug; } public void setPlug(boolean plug) { this.plug = plug; } public boolean isAutoRead() { return autoRead; } public void setAutoRead(boolean autoRead) { this.autoRead = autoRead; } }
最后,就是Activity啦,其功能实现为设置好后点击右上角“完成”,即可保存设置内容。
方法一:通过SharedPreferences
,保存设置内容:
public class Setting2Activity extends AppCompatActivity { private CheckBox titleShow,notify,plug,autoRead,transmit; private TextView setting,textSize; private LinearLayout text; private SharedPreferences sp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_setting2); titleShow = (CheckBox) findViewById(R.id.titleShow); notify = (CheckBox) findViewById(R.id.notify); plug = (CheckBox) findViewById(R.id.plug); autoRead = (CheckBox) findViewById(R.id.autoRead); transmit = (CheckBox) findViewById(R.id.transmit); setting = (TextView) findViewById(R.id.setting); textSize = (TextView) findViewById(R.id.textSize); text = (LinearLayout) findViewById(R.id.text); //开启设置以保存的设置 settingStart(); //监听字体大小的改变,选择方式:对话框 text.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(Setting2Activity.this); builder.setTitle("选择字体大小"); builder.setIcon(R.mipmap.ic_launcher); final String[] items = {"小","中","大"}; int i; for(i=0;i<items.length;i++ ){ if(items[i].equals(textSize.getText())){ break; } } builder.setSingleChoiceItems(items,i, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(getBaseContext(),items[which].toString(),Toast.LENGTH_SHORT).show(); textSize.setText(items[which].toString()); dialog.dismiss(); } }); builder.setCancelable(true); AlertDialog alertDialog = builder.create(); alertDialog.show(); } }); sp = getSharedPreferences("mysetting.txt", Context.MODE_PRIVATE); setting.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //存入数据 SharedPreferences.Editor editor = sp.edit(); editor.putBoolean("titleShow",titleShow.isChecked()); editor.putString("textSize",textSize.getText().toString()); editor.putBoolean("notify",notify.isChecked()); editor.putBoolean("plug",plug.isChecked()); editor.putBoolean("autoRead",autoRead.isChecked()); editor.putBoolean("transmit",transmit.isChecked()); editor.commit(); Toast.makeText(getBaseContext(),"保存成功",Toast.LENGTH_SHORT).show(); } }); } //启动函数 public void settingStart(){ sp = getSharedPreferences("mysetting.txt", Context.MODE_PRIVATE); if(sp.getString("textSize","").equals("")){ Toast.makeText(getBaseContext(),"还没有预设值",Toast.LENGTH_SHORT).show(); return; } titleShow.setChecked(sp.getBoolean("titleShow",false)); textSize.setText(sp.getString("textSize","")); notify.setChecked(sp.getBoolean("notify",false)); plug.setChecked(sp.getBoolean("plug",false)); autoRead.setChecked(sp.getBoolean("autoRead",false)); transmit.setChecked(sp.getBoolean("transmit",false)); } }
方法二:实体类保存,并将其传到SD卡文件中:
public class SettingActivity extends AppCompatActivity { private CheckBox titleShow,notify,plug,autoRead,transmit; private TextView setting,textSize; private LinearLayout text; private SettingData settingData; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_scroll1); titleShow = (CheckBox) findViewById(R.id.titleShow); notify = (CheckBox) findViewById(R.id.notify); plug = (CheckBox) findViewById(R.id.plug); autoRead = (CheckBox) findViewById(R.id.autoRead); transmit = (CheckBox) findViewById(R.id.transmit); setting = (TextView) findViewById(R.id.setting); textSize = (TextView) findViewById(R.id.textSize); text = (LinearLayout) findViewById(R.id.text); //开启设置以保存的设置 settingStart(); //监听字体大小的改变,选择方式:对话框 text.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(SettingActivity.this); builder.setTitle("选择字体大小"); builder.setIcon(R.mipmap.ic_launcher); final String[] items = {"小","中","大"}; int i; for(i=0;i<items.length;i++ ){ if(items[i].equals(textSize.getText())){ break; } } builder.setSingleChoiceItems(items,i, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(getBaseContext(),items[which].toString(),Toast.LENGTH_SHORT).show(); textSize.setText(items[which].toString()); dialog.dismiss(); } }); builder.setCancelable(true); AlertDialog alertDialog = builder.create(); alertDialog.show(); } }); //监听“完成” setting.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { settingData = new SettingData(titleShow.isChecked(), textSize.getText().toString(),notify.isChecked(), plug.isChecked(),autoRead.isChecked(),transmit.isChecked()); FileOutputStream fos = ; ObjectOutputStream oos = ; String state = Environment.getExternalStorageState(); if(!state.equals(Environment.MEDIA_MOUNTED)){ Toast.makeText(getBaseContext(),"请检查SD卡",Toast.LENGTH_SHORT).show(); return; } File file = Environment.getExternalStorageDirectory(); try { File myfile = new File(file.getCanonicalPath(),"/设置.txt"); fos = new FileOutputStream(myfile); oos = new ObjectOutputStream(fos); oos.writeObject(settingData); Toast.makeText(getBaseContext(),"设置成功",Toast.LENGTH_SHORT).show(); oos.flush(); oos.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (fos!=){ try { fos.flush(); fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } }); } public void settingStart(){ //开启软件设置之前的设置 ObjectInputStream ois = ; FileInputStream fis = ; String statu = Environment.getExternalStorageState(); if(!statu.equals(Environment.MEDIA_MOUNTED)){ Toast.makeText(this,"SD卡未就绪",Toast.LENGTH_SHORT).show(); return; } File root = Environment.getExternalStorageDirectory(); try { fis = new FileInputStream(root+"/设置.txt"); ois = new ObjectInputStream(fis); try { settingData = (SettingData) ois.readObject(); } catch (ClassNotFoundException e) { e.printStackTrace(); } titleShow.setChecked(settingData.isTitleShow()); textSize.setText(settingData.getTextSize()); notify.setChecked(settingData.isNotify()); plug.setChecked(settingData.isPlug()); autoRead.setChecked(settingData.isAutoRead()); transmit.setChecked(settingData.isTransmit()); } catch (FileNotFoundException e) { Toast.makeText(getBaseContext(),"未找到文件",Toast.LENGTH_SHORT).show(); } catch (StreamCorruptedException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(fis!=){ } } } }
-
Android-如何将用户设置进行保存?(内部存储、SD卡,用类作为媒介)
2016-08-16 22:16:47本次实例是将用户的设置信息,以实体类为媒介,保存到内部存储或者SD卡的文件里。再次打开应用时,程序会自动调用文件中实体类,并对设置信息进行设置,使其恢复到用户最终保存的状态。 首先,创建一个实体类(这里...本次实例是将用户的设置信息,以实体类为媒介,保存到内部存储或者SD卡的文件里。再次打开应用时,程序会自动调用文件中实体类,并对设置信息进行设置,使其恢复到用户最终保存的状态。
首先,创建一个实体类(这里要实现 Serializable 接口,即序列化,这样才能让类在内存中传递):
接下里是Layout布局,这里楚略地弄了一个设置界面:public class SettingData implements Serializable{ private boolean titleShow; private String textSize; private boolean notify; private boolean plug; private boolean autoRead; private boolean transmit; public SettingData() { } public SettingData(boolean titleShow, String textSize, boolean notify, boolean plug, boolean autoRead, boolean transmit) { this.titleShow = titleShow; this.textSize = textSize; this.notify = notify; this.plug = plug; this.autoRead = autoRead; this.transmit = transmit; } public boolean isTransmit() { return transmit; } public void setTransmit(boolean transmit) { this.transmit = transmit; } public boolean isTitleShow() { return titleShow; } public void setTitleShow(boolean titleShow) { this.titleShow = titleShow; } public String getTextSize() { return textSize; } public void setTextSize(String textSize) { this.textSize = textSize; } public boolean isNotify() { return notify; } public void setNotify(boolean notify) { this.notify = notify; } public boolean isPlug() { return plug; } public void setPlug(boolean plug) { this.plug = plug; } public boolean isAutoRead() { return autoRead; } public void setAutoRead(boolean autoRead) { this.autoRead = autoRead; } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="jerehdu.com.jerehdu04.Scroll1Activity" android:orientation="vertical"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="none"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginBottom="6dp"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/left_menu_activity_pressed"/> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginLeft="120dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="设置" android:textSize="20sp" android:layout_gravity="center" android:layout_weight="1"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="完成" android:textSize="18sp" android:id="@+id/setting"/> </LinearLayout> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#eaeaea" android:layout_marginBottom="6dp" android:layout_marginTop="6dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="30dp" android:weightSum="1" android:orientation="horizontal" android:gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="显示列表摘要" android:textSize="16sp" android:layout_weight="1"/> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/titleShow"/> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#eaeaea" android:layout_marginBottom="6dp" android:layout_marginTop="6dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="30dp" android:orientation="horizontal" android:id="@+id/text" android:gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="字体大小" android:textSize="16sp" android:layout_weight="1"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="中" android:textSize="14sp" android:id="@+id/textSize"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/left_menu_blgj_pressed"/> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#eaeaea" android:layout_marginBottom="6dp" android:layout_marginTop="6dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="30dp" android:orientation="horizontal" android:gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="列表页评论" android:textSize="16sp" android:layout_weight="1"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="不限" android:textSize="14sp"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/left_menu_blgj_pressed"/> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#eaeaea" android:layout_marginBottom="6dp" android:layout_marginTop="6dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="30dp" android:orientation="horizontal" android:gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="2G/3G网络流量" android:textSize="16sp" android:layout_weight="1"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="较省流量" android:textSize="14sp"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/left_menu_blgj_pressed"/> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#eaeaea" android:layout_marginBottom="6dp" android:layout_marginTop="6dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="30dp" android:orientation="horizontal" android:gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="清理缓存" android:textSize="16sp" android:layout_weight="1"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="当前缓存:5.21MB" android:textSize="14sp"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/left_menu_blgj_pressed"/> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#eaeaea" android:layout_marginBottom="6dp" android:layout_marginTop="6dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="30dp" android:orientation="horizontal" android:gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="推送通知" android:textSize="16sp" android:layout_weight="1"/> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/notify"/> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#eaeaea" android:layout_marginBottom="6dp" android:layout_marginTop="6dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="30dp" android:orientation="horizontal" android:gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="互动插件" android:textSize="16sp" android:layout_weight="1"/> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/plug"/> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#eaeaea" android:layout_marginBottom="6dp" android:layout_marginTop="6dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="30dp" android:orientation="horizontal" android:gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="自动优化阅读" android:textSize="16sp" android:layout_weight="1"/> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/autoRead"/> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#eaeaea" android:layout_marginBottom="6dp" android:layout_marginTop="6dp" /> <LinearLayout android:layout_width="match_parent" android:layout_height="30dp" android:orientation="horizontal" android:gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="收藏时转发" android:textSize="16sp" android:layout_weight="1"/> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/transmit"/> </LinearLayout> </LinearLayout> </ScrollView> </LinearLayout>
最后,就是Activity啦,其功能实现为设置好后点击右上角“完成”,即可保存设置内容。
方法一:通过SharedPreferences
,保存设置内容:
public class Setting2Activity extends AppCompatActivity { private CheckBox titleShow,notify,plug,autoRead,transmit; private TextView setting,textSize; private LinearLayout text; private SharedPreferences sp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_setting2); titleShow = (CheckBox) findViewById(R.id.titleShow); notify = (CheckBox) findViewById(R.id.notify); plug = (CheckBox) findViewById(R.id.plug); autoRead = (CheckBox) findViewById(R.id.autoRead); transmit = (CheckBox) findViewById(R.id.transmit); setting = (TextView) findViewById(R.id.setting); textSize = (TextView) findViewById(R.id.textSize); text = (LinearLayout) findViewById(R.id.text); //开启设置以保存的设置 settingStart(); //监听字体大小的改变,选择方式:对话框 text.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(Setting2Activity.this); builder.setTitle("选择字体大小"); builder.setIcon(R.mipmap.ic_launcher); final String[] items = {"小","中","大"}; int i; for(i=0;i<items.length;i++ ){ if(items[i].equals(textSize.getText())){ break; } } builder.setSingleChoiceItems(items,i, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(getBaseContext(),items[which].toString(),Toast.LENGTH_SHORT).show(); textSize.setText(items[which].toString()); dialog.dismiss(); } }); builder.setCancelable(true); AlertDialog alertDialog = builder.create(); alertDialog.show(); } }); sp = getSharedPreferences("mysetting.txt", Context.MODE_PRIVATE); setting.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //存入数据 SharedPreferences.Editor editor = sp.edit(); editor.putBoolean("titleShow",titleShow.isChecked()); editor.putString("textSize",textSize.getText().toString()); editor.putBoolean("notify",notify.isChecked()); editor.putBoolean("plug",plug.isChecked()); editor.putBoolean("autoRead",autoRead.isChecked()); editor.putBoolean("transmit",transmit.isChecked()); editor.commit(); Toast.makeText(getBaseContext(),"保存成功",Toast.LENGTH_SHORT).show(); } }); } //启动函数 public void settingStart(){ sp = getSharedPreferences("mysetting.txt", Context.MODE_PRIVATE); if(sp.getString("textSize","").equals("")){ Toast.makeText(getBaseContext(),"还没有预设值",Toast.LENGTH_SHORT).show(); return; } titleShow.setChecked(sp.getBoolean("titleShow",false)); textSize.setText(sp.getString("textSize","")); notify.setChecked(sp.getBoolean("notify",false)); plug.setChecked(sp.getBoolean("plug",false)); autoRead.setChecked(sp.getBoolean("autoRead",false)); transmit.setChecked(sp.getBoolean("transmit",false)); } }
方法二:实体类保存,并将其传到SD卡文件中:
public class SettingActivity extends AppCompatActivity { private CheckBox titleShow,notify,plug,autoRead,transmit; private TextView setting,textSize; private LinearLayout text; private SettingData settingData; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_scroll1); titleShow = (CheckBox) findViewById(R.id.titleShow); notify = (CheckBox) findViewById(R.id.notify); plug = (CheckBox) findViewById(R.id.plug); autoRead = (CheckBox) findViewById(R.id.autoRead); transmit = (CheckBox) findViewById(R.id.transmit); setting = (TextView) findViewById(R.id.setting); textSize = (TextView) findViewById(R.id.textSize); text = (LinearLayout) findViewById(R.id.text); //开启设置以保存的设置 settingStart(); //监听字体大小的改变,选择方式:对话框 text.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(SettingActivity.this); builder.setTitle("选择字体大小"); builder.setIcon(R.mipmap.ic_launcher); final String[] items = {"小","中","大"}; int i; for(i=0;i<items.length;i++ ){ if(items[i].equals(textSize.getText())){ break; } } builder.setSingleChoiceItems(items,i, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(getBaseContext(),items[which].toString(),Toast.LENGTH_SHORT).show(); textSize.setText(items[which].toString()); dialog.dismiss(); } }); builder.setCancelable(true); AlertDialog alertDialog = builder.create(); alertDialog.show(); } }); //监听“完成” setting.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { settingData = new SettingData(titleShow.isChecked(), textSize.getText().toString(),notify.isChecked(), plug.isChecked(),autoRead.isChecked(),transmit.isChecked()); FileOutputStream fos = null; ObjectOutputStream oos = null; String state = Environment.getExternalStorageState(); if(!state.equals(Environment.MEDIA_MOUNTED)){ Toast.makeText(getBaseContext(),"请检查SD卡",Toast.LENGTH_SHORT).show(); return; } File file = Environment.getExternalStorageDirectory(); try { File myfile = new File(file.getCanonicalPath(),"/设置.txt"); fos = new FileOutputStream(myfile); oos = new ObjectOutputStream(fos); oos.writeObject(settingData); Toast.makeText(getBaseContext(),"设置成功",Toast.LENGTH_SHORT).show(); oos.flush(); oos.close(); } catch (IOException e) { e.printStackTrace(); } finally { if (fos!=null){ try { fos.flush(); fos.close(); } catch (IOException e) { e.printStackTrace(); } } } } }); } public void settingStart(){ //开启软件设置之前的设置 ObjectInputStream ois = null; FileInputStream fis = null; String statu = Environment.getExternalStorageState(); if(!statu.equals(Environment.MEDIA_MOUNTED)){ Toast.makeText(this,"SD卡未就绪",Toast.LENGTH_SHORT).show(); return; } File root = Environment.getExternalStorageDirectory(); try { fis = new FileInputStream(root+"/设置.txt"); ois = new ObjectInputStream(fis); try { settingData = (SettingData) ois.readObject(); } catch (ClassNotFoundException e) { e.printStackTrace(); } titleShow.setChecked(settingData.isTitleShow()); textSize.setText(settingData.getTextSize()); notify.setChecked(settingData.isNotify()); plug.setChecked(settingData.isPlug()); autoRead.setChecked(settingData.isAutoRead()); transmit.setChecked(settingData.isTransmit()); } catch (FileNotFoundException e) { Toast.makeText(getBaseContext(),"未找到文件",Toast.LENGTH_SHORT).show(); } catch (StreamCorruptedException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if(fis!=null){ } } } }
效果图:
-
在Android 2.2上设置程序默认安装SD卡
2011-03-26 16:57:002.2系统应用程序默认被安装在手机内部存储上,不同通过下面的教程你可以自动安装几乎所有应用程序到手机SD卡上。 如何在Android 2.2系统安装所有应用程序到SD卡 l 在Android手机启用USB调试功能,方法为在...如 果你已经在手机上升级了Android 2.2系统,那么你肯定已经尝试过移动一些应用程序到SD卡上来释放手机内存空间。在Android 2.2系统上移动应用程序到SD卡,首先应用程序必须支持这一操作。另外Android 2.2系统应用程序默认被安装在手机内部存储上,不同通过下面的教程你可以自动安装几乎所有应用程序到手机SD卡上。
如何在Android 2.2系统安装所有应用程序到SD 卡
l 在Android手机启用USB调试功能,方法为在手机设置 >应用程序 >开发 勾选USB调试选项
l 在你的电脑上下载并安装Android SDK (下载地址为 http://developer.android.com/sdk/),解压下载的程序包到你指定的文件夹,运行SDK Setup.exe,点击左侧的Available Packages,如果程序跳出报错提示,在设置里勾选“Force https://…”,在Available Packages的列表里,选择“ Usb Driver package ”,点击install右下角的install按钮开始安装,按照步骤完成安装操作。
l 使用USB线缆连接你的手机和电脑,你的电脑应该会跳出提示让你安装新硬件的驱动程序,选择从指定位置安装,然后选择从android-sdk/usb_driver文件夹安装。注意连接手机到电脑后不要挂载你的SD卡,只需要用线缆连接即可。
l 在Windows系统中打开命令提示符(开始菜单,选择运行,输入cmd回车即可),使用CD命令切换到Android-SDK/tools目录下,Android-SDK为你前面安装Android SDK指定的目录。
l 在命令提示符进入Android-SDK/tools目录后,输入adb devices回车,你应该可以看到一串序列号,接着输入adb shell pm setInstallLocation 2,回车,搞定!Android 系统现在回默认安装所有应用程序到SD卡,同时也会启动大部分程序可以移动到手机内部存储。
l 如果想重新设置应用程序默认安装到手机内部存储,可以按照上面的方法,输入adb shell pm setInstallLocation 0回车即可。
哪些应用程序应该保留在手机内部存储上
l 需要和Android系统交互并且在后台运行的程序
l 动态壁纸
l Widget小工具
l 绑定Widget的应用程序(程序安装在SD卡widget将无法使用)
使 用上面的方法设置应用程序默认安装到SD卡后,上面提到的这四种类型的程序应该手工转移到手机内存上,原因如下:当你把手机SD卡挂载为系统磁盘 后,Android系统将不需要访问安装在内存卡上的应用程序,所以安装在内存卡上的应用程序将被关闭。如果你安装在SD卡的程序需要手机开机时自动启 动,不过安装在SD卡的应用程序肯定比安装在手机内存上的应用程序运行更慢,所以SD卡上那些自动运行的程序将无法识别自己的位置,系统会报错,这些程序 将无法正常使用。
移动SD卡上的应用程序到手机内存
既 然上面这四种程序必须要安装在手机内存才能正常运行,而现在系统又默认安装所有程序到SD卡,这就需要把这些程序手机转移到内存上,手机操作太麻烦,可以 在Android Market上下载安装App 2 SD程序,这个程序会自动识别应用程序安装的位置,并且可以很方便的在SD卡和手机内存里方便的互相转移,并且支持批量操作,非常方便。
-
Android存储的实现
2016-12-09 19:07:53在Android开发中,少不了对数据文件进行存取,需要掌握的Android存储功能技术如下: ...内部存储:即面向移动设备内部自带存储区域的存取(并不是手机的CPU内存),同样可为数据做持久化保存,由于移动设备可能并 -
文件数据储存之内部储存
2019-03-01 13:28:30Android官方API:在设备内存中存储私有数据。 内部储存:Android的内部...可以把它设置为公有的(public),则可以被其他的App访问。当一个应用卸载后,内部储存中的文件会被删除。 使用:内部储存空间十分有限,主... -
bios的设置,,,,,
2010-04-23 19:39:52设置为"AUTO"时,如果通过串口扩展卡在同一个端口地址上使用了两个设备,内置串口自动重新分配可用端口地址。串口先使用COM1,再使用COM2,如果两个地址都已经分配给某个端口,该端口将被禁用。 Parallel Port 并口... -
计算机组装实习操作实习报告拆装电脑
2020-06-28 15:46:39解决的方法我们只需要进入CMOS设置中的“PNP/PCI CONFIGURATION ”,把“Reset ESCD ”设置为“Enabled”(再次启动电脑后,该选项会自动变换成Disabled)却可。 9.BIOS芯片氧化或接触不良 每一块电脑主板都有一片... -
66、SD卡相关 67、服务相关 68、Shell相关 69、短信相关 70、Snackbar相关 71、SharedPreferences相关 72、状态栏背景色 73、状态栏字体颜色模式 74、字符串相关 75、线程操作相关 76、时间经历工具类 77、Toast工具...
-
阴道镜XP常用.rar
2019-09-22 17:15:319、DICOM支持:可升级为DICOM版工作站,支持ICOM传输,DICOM存储,DICOM打印。 10、网络支持:工作站软件可升级为网络版,同时使用网络数据库,各工作站共享数据资源,方便各科室调阅。 11、数据库:单机版软件网络... -
超声随心所欲Win10版超随心所欲win10版.rar
2019-06-19 16:29:179、DICOM支持:可升级为DICOM版工作站,支持ICOM传输,DICOM存储,DICOM打印。 10、网络支持:工作站软件可升级为网络版,同时使用网络数据库,各工作站共享数据资源,方便各科室调阅。 11、数据库:单机版软件网络... -
超声随心所欲xp版.rar
2015-08-26 22:55:409、DICOM支持:可升级为DICOM版工作站,支持ICOM传输,DICOM存储,DICOM打印。 10、网络支持:工作站软件可升级为网络版,同时使用网络数据库,各工作站共享数据资源,方便各科室调阅。 11、数据库:单机版软件网络... -
如何抓取微信小程序 HTTPS 请求
2020-11-27 07:30:21从电脑上打开手机的内存卡,直接把证书导入SD卡中。点击设置 -> 安全 -> 从 SD 卡安装 -> 从内部存储空间中找到证书,点击安装即可(不能直接点击安装,会出现无法安装证书,... -
正版B超工作站B超软件B超图文报告软件B超影像软件下载
2011-10-22 19:52:509、DICOM支持:可升级为DICOM版工作站,支持ICOM传输,DICOM存储,DICOM打印。 10、网络支持:工作站软件可升级为网络版,同时使用网络数据库,各工作站共享数据资源,方便各科室调阅。 11、数据库:单机版软件... -
由0晋升200%系统高手
2008-09-12 16:27:334.2.4 常见存储介质CD、CD-R、CD-RW、U盘和数码相机内存卡的修复 4.2.5 常用邮件、图片、影像、ZIP、MS Office、声音文件的修复 实例1:系统恢复与备份一键搞定—史上最完美的一键恢复、备份系统 实例2:Windows ... -
电脑常见问题与故障1000例(高清PDF中文版)
2011-05-30 07:13:36369.打印机内部灰尘过多 370.打印机软性喷头堵塞 371.喷头堵塞 372.打印机喷嘴阻塞 373.打印头损坏 374.主板上打印端口失效 375.打印一半后“死机” 376.页码打印不正确 377.打印图像上出现横纹、白条或图文变浅、... -
SQLServer安全及性能优化
2012-03-07 20:49:25限制共享【不能设置为完全控制】 及时审核日志 sqlserver的审核机制可以帮助跟踪并且阻止系统中没有授权的用户他的行为。比如没有授权的用户登录系统会阻止这次登录,并且把这次操作给记录下来。审核机制既能跟踪... -
180、修复部分华为机型无法读取内存卡的问题 179、修复Service可能存在的问题 178、允许根据intent判断Activity是否在外部启动 177、修复部分机型上Gms和Google Play启动到了不正确的环境 176、修复新实现的...
-
该调用将会设置协议的最大发送窗口和最大接收窗口大小,默认为32. 这个可以理解为 TCP的 SND_BUF 和 RCV_BUF,只不过单位不一样 SND/RCV_BUF 单位是字节,这个单位是包。 最大传输单元: 纯算法协议并不负责探测 ...
-
《Java开发实战1200例(第I卷)》(李钟尉.陈丹丹).part2 高清完整PDF版
2016-06-13 15:53:27实例272 为保存对话框设置默认文件名 实例273 支持图片预览的文件选择对话框 实例274 颜色选择对话框 实例275 信息输入对话框 实例276 定制信息对话框 11.7 MDI窗体的使用 实例277 创建内部子窗体 实例278 ... -
《Java开发实战1200例(第I卷)》(李钟尉.陈丹丹).part3 高清完整PDF版
2016-06-13 16:11:24实例272 为保存对话框设置默认文件名 实例273 支持图片预览的文件选择对话框 实例274 颜色选择对话框 实例275 信息输入对话框 实例276 定制信息对话框 11.7 MDI窗体的使用 实例277 创建内部子窗体 实例278 ... -
Visual C++编程技巧精选500例.pdf
2012-09-01 15:01:50《Visual C++编程技巧精选500例》pdf Visual C++编程技巧精选500例.pdf 第1章 消息框 001 如何创建消息框?...358 如何获取系统内存的使用情况? 359 如何映射网络驱动器? 360 如何取消网络驱动器映射? 第... -
实在看不下去了,所以才发这文,码主,你看看吧
2021-01-11 21:16:20<ol><li>这辈子第一次见到有人写dll,居然使用内部类做为回调参数的的 string是C++内置类型,实际上,也算是一个类(类实际在编译中,一般都处理成record/struct形式存放在编译后的bin中的) 不同的版本,不同的... -
大势至共享文件审计系统
2012-12-24 14:56:52使得单位重要的共享文件常常被员工私自拷贝、修改、删除等,并且由于对外来电脑缺乏控制,导致外来人员通过携带笔记本、U盘、移动存储设备等接入到单位内部的局域网中,非法访问、拷贝重要的共享文件,给单位的信息... -
黑马安卓52期视频教程
2015-06-24 22:15:4809_使用路径API获取内部存储的路径 10_在外部存储读写文件 11_检测sd卡的状态 12_查看源码获取sd剩余空间 13_文件访问权限 14_SharedPreference 15_生成xml文件 16_用序列化器生成Xml文件 17_pull解析XML 18_debug... -
精子软件精子分析工作中精液分析XP随心所欲
2011-12-09 14:10:589、查询:软件内部使用SQL语言进行模糊查询,数据库的每个字段均可单独或组合查询,查询结果可以集中备份、删除,可以直接备份到光盘。 10、统计:精液分析软件通过对不同字段的查询得出的结果可以打印报表,如:... -
C#全能速查宝典
2014-04-26 16:16:271.1.4 变量——存储特定类型的数据 4 1.1.5 Console类——控制台中的输入流、输出流和错误流 6 1.1.6 Convert类——类型转换 8 1.1.7 常量——值不改变的量 9 1.1.8 Dispose方法——释放资源 10 1.1.9 迭代器——... -
会计理论考试题
2012-03-07 21:04:40A、可以减少屏幕损耗 B、可以节省计算机内存 C、可以保障系统安全 D、可以增加动感 36.记录在存储介质上的一组相关信息的集合称为 __D_ 。 A、程序 B、磁盘 C、软件 D、文件 37.在资源管理器中,双击扩展名为“.TXT... -
Flash 反编译工具(JPEXS Free Flash Decompiler) v3.0 中文版.zip
2019-07-13 20:04:54如果这个产品上,缓存文件存储在磁盘上的临时目录,否则会被存储在内存中。 突出显示文档类上启动 - FFDec SWF可以打开后直接跳转到AS3文档类 更改语言设置面板 其他 通过右键单击上下文菜单中删除标签标签树 ... -
Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3
2016-06-12 11:39:31实例258 设置窗体背景颜色为淡蓝色 329 实例259 实现带背景图片的窗体 330 实例260 使背景图片自动适应窗体的大小 331 实例261 背景为渐变色的主界面 332 实例262 随机更换窗体背景 334 11.5 窗体形状及应用 335 ...
-
项目经理成长之路
-
全光子晶体光纤单级直接放大产生34 W高功率飞秒脉冲
-
ThreadLocal详解
-
select和epoll的过程分析与比较
-
【Python-随到随学】FLask第二周
-
在 Linux 上构建企业级 DNS 域名解析服务
-
NFS 实现高可用(DRBD + heartbeat)
-
物联网基础篇:快速玩转MQTT
-
【硬核】一线Python程序员实战经验分享(1)
-
Spring学习笔记之IOC与DI概述
-
【CTF资料-0x0002】简易Linux堆利用入门教程by arttnba3
-
白话:java从入门到实战
-
Linux基础入门系列课程
-
iptables 企业级防火墙配置(四表五链)
-
基于python的dango框架购物商城毕业设计毕设源代码使用教程
-
市场-源码
-
JMETER 性能测试基础课程
-
电影记录-源码
-
基于Qt的LibVLC开发教程
-
2021 PHP租车系统 毕业设计 毕设源码 源代码使用教程