怎么如何升级手机运存Android版本

如何升级安卓系统版本_百度知道
如何升级安卓系统版本
比如4.0.4,怎么升级到4.1版本,手机品牌是三星。
我有更好的答案
通过Kies方式升级:
1)在电脑中下载安装Kies软件;固件操作方法有如下安卓手机升级系统&#47。
通过S 换机助手升级:
1)电脑中下载安装S 换机助手 PC 版
2)将手机与电脑连接后,下滑屏幕顶帘-已连接进行充电-选择&quot。
注意:下载安装kies时手机与电脑不要连接;固件更新版本,软件上会弹出更新提示;&固件新版本时Kies软件会有固件升级提示,点击升级即可:
1,使用的PC软件不同。
2)安装后手机和电脑通过USB连接。
3)开启电脑中的S 换机助手,若手机有系统&#47.Fota方式升级:通过手机设定-(一般)-关于设备-系统更新(或软件更新)-更新。
2.连接电脑使用S 换机助手或Kies软件更新(型号不同:携带购机发票、包修卡和机器到三星服务中心,由专业的售后工程师帮助您升级,打开Kies软件,如有手机系统&#47,点击更新即可。
3.送到三星服务中心升级;媒体设备(MTP)&&
之前用kies升级过,但是安卓版本还是4.0.4。
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。安卓手机怎么升级安卓版本_百度知道
安卓手机怎么升级安卓版本
我有更好的答案
电池电量达50%以上。3、可用手机内存达1GB以上。通过在线固件升级
服务下载并安装固件更新。注:使用FOTA软件升级所需条件。2。二:1,固件升级可以对机器的部分功能进行优化、完善手机系统、使用Kies/kies3(如果当前版本为4:一,使手机系统更稳定、更流畅。建议按照以下方法参考尝试手机若有了新的固件,会有推送更新通知;MAC
OS版本下载)三、如果通过以上两种方法均不能正常升级,建议携带三包凭证、打开设定-关于设备-系统更新-更新,kies软件下载:可通过登陆官网-点击右上角放大镜搜索栏-输入KIES关键字-再次点击放大图标即可搜索下载到KIES软件,下载安装到电脑中)近期上市新款机型通过下载Smart
Switch软件连接电脑来更新固件(Smart
Switch下载方法:进入官网-点击应用标签-点击Smart
Switch-在页面中间位置根据电脑的操作系统选择Windows版本下载&#47、稳定的WI-FI或3G网络,需要下载KIES3.3系统
三星产品问答服务
主营:电子产品
在手机设置里找到系统更新
为您推荐:
其他类似问题
您可能关注的内容
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。android app版本更新升级
demo的逻辑过程:
1.进入程序
2.检查是否有版本更新,如果有则询问用户是否更新,否则维持原状
3.检测当前网络状态并且询问用户是否进行版本更新,如果是则进行更新,否则维持原状
4.切换网络,当当前网络为wifi时,检查版本更新,重复2、3.
CommonAsyncTask:执行网络请求操作
ConnectionUrl:记录要请求的IP地址
NetworkHelp:网络辅助类
upDateAppUtil:更新版本类
MainActivity:UI及执行界面
MainActivity:
public class MainActivity extends Activity {
//接收网络请求返回回调
private ListenerImpl mListenerI
private ProgressDialog m_progressD
private static final String TAG = &MainActivity&;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
m_progressDlg =
new ProgressDialog(this);
m_progressDlg.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// 设置ProgressDialog 的进度条是否不明确 false 就是不设置为不明确
m_progressDlg.setIndeterminate(false);
Log.d(TAG,&ONCREATE&);
//注册广播接收器
registerReceiver();
//绑定网络数据回调接收器
initListener();
//获取服务器版本
updateAppUtil.getServerVersion(this);
protected void onStart(){
super.onStart();
Log.d(TAG, &ONSTART&);
* 网络数据回调
public void initListener() {
mListenerImpl =
mListenerImpl = ListenerImpl.getInstance();
mListenerImpl.setOnListener(new Listener() {
void receiveData(T data) {
Log.d(TAG, data.toString());
dealAfterResponse((String) data);
* 解析忘了数据
* @param s
private void dealAfterResponse(String s) {
object = new JSONObject(s);
if (object.getInt(&Success&)==200) {
//版本需要更新操作
if (object.getInt(&appVersion&)!= updateAppUtil.getAppVersion(this)){
Log.d(TAG, &not same&);
if (NetworkHelp.isWifi(this)){
if (dialogs==null)
showDialog(&有版本更新,是否更新版本&);
if (dialogs==null)
showDialog(&有版本更新,当前不在wifi状态,是否更新版本&);
//版本不需要更新操作
Log.d(TAG, &same&);
} catch (JSONException e) {
e.printStackTrace();
* 接收网络状态广播消息
public class MyReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager=(ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo
mobNetInfo=connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo
wifiNetInfo=connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {
Toast.makeText(context, &网络状态不可用&, Toast.LENGTH_SHORT).show();
//获取服务器版本
Log.d(TAG,&MyReceiver&);
updateAppUtil.getServerVersion(context);
//如果无网络连接activeInfo为null
* @param str
public void showDialog(String str){
dialogs = new AlertDialog.Builder(this).setTitle(&软件更新&).setMessage(str)
// 设置内容
.setPositiveButton(&更新&,// 设置确定按钮
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
m_progressDlg.setTitle(&正在下载&);
m_progressDlg.setMessage(&请稍候...&);
updateAppUtil.downNewApp(ConnectionUrl.GET_SERVER_IP, m_progressDlg);
updateAppUtil.getAllFiles(new File(&/sdcard/newApp&));
.setNegativeButton(&暂不更新&,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
dialogs.dismiss();
}).create();// 创建
// 显示对话框
dialogs.show();
* 注册广播接收器
void registerReceiver(){
IntentFilter filter=new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
MyReceiver myReceiver=new MyReceiver();
this.registerReceiver(myReceiver, filter);
protected void onDestroy(){
super.onDestroy();
Log.d(TAG,&ONDESTORY&);
protected void onPause(){
super.onPause();
Log.d(TAG,&ONPAUSE&);
if (isFinishing()){
Log.d(TAG,&ONONON&);
该类主要工作是注册了一个网络状态改变的广播接收器,当网络状态改变的时候就会执行不同的操作,但是经过这个demo发现他并非改变时才会发送广播,进入app后也会发送广播:
if (!mobNetInfo.isConnected() && !wifiNetInfo.isConnected()) {
Toast.makeText(context, &网络状态不可用&, Toast.LENGTH_SHORT).show();
//获取服务器版本
Log.d(TAG,&MyReceiver&);
updateAppUtil.getServerVersion(context);
mobNetInfo是指手机卡网络,wifiNetInfo是指无线网络。当两者任意一个存在时就会执行以下代码获取服务器上的版本号:
updateAppUtil.getServerVersion(context);
该类还有一个工作是注册了一个回调,接收服务器返回的版本号并且调用dealAfterResponse方法解析:
public void initListener() {
mListenerImpl =
mListenerImpl = ListenerImpl.getInstance();
mListenerImpl.setOnListener(new Listener() {
void receiveData(T data) {
Log.d(TAG, data.toString());
dealAfterResponse((String) data);
调用getAppVersion能够获取当前app的版本号,版本号不同就会询问是否更新,判断不同的网络状态,弹出不同内容的提示框&&showDialog():
if (object.getInt(&appVersion&)!= updateAppUtil.getAppVersion(this)){
Log.d(TAG, &not same&);
if (NetworkHelp.isWifi(this)){
if (dialogs==null)
showDialog(&有版本更新,是否更新版本&);
if (dialogs==null)
showDialog(&有版本更新,当前不在wifi状态,是否更新版本&);
//版本不需要更新操作
Log.d(TAG, &same&);
点确定后调用以下方法下载并且安装新版本app:
updateAppUtil.downNewApp(ConnectionUrl.GET_SERVER_IP, m_progressDlg);
updateAppUtil
该类封装了一些更新app版本要用到的一些方法。
public class updateAppUtil {
private static Context mC
private static ProgressDialog progressD
private static final String
DIRECTORY_NAME = &/newApp&;
private static final String
File_NAME = &NewVersion.apk&;
private static final String
TAG = &updateAppUtil&;
* 获取本app版本号
* @param context
public static int getAppVersion(Context context) {
mContext =
int verCode = -1;
//对应Manifest.xml里的package部分
verCode = context.getPackageManager().getPackageInfo(
&com.test.tangjiarao.versionupdate&, 0).versionC
} catch (PackageManager.NameNotFoundException e) {
Log.e(&msg&, e.getMessage());
return verC
* 获取服务器的版本号
* @param context
public static void getServerVersion(Context context){
Log.d(TAG,&getServerVersion&);
new CommonAsyncTask(context).execute(&get&, ConnectionUrl.GET_SERVER_IP);
* 创建文件路径
public static File getDirectory(){
File file = new File(Environment.getExternalStorageDirectory() + DIRECTORY_NAME);
//如果该路径不存在,则创建文件夹
if (!file.exists()) {
file.mkdir();
* 获取目标路径下的文件
* @param root
public static void getAllFiles(File root){
File files[] = root.listFiles();
if(files != null)
for(File f:files){
if(f.isDirectory()){
getAllFiles(f);
Log.d(TAG, f.getName());
* @param path
* @param mProgressDialog
public static void downNewApp(String path,ProgressDialog mProgressDialog) {
progressDialog =mProgressD
progressDialog.show();
new Thread() {
public void run() {
FileOutputStream fos =
BufferedInputStream bis =
HttpURLConnection connection =
url = new URL(ConnectionUrl.DOWN_NEW_APP);
connection = (HttpURLConnection) url.openConnection();
//不能获取服务器响应
if (HttpURLConnection.HTTP_OK != connection.getResponseCode()) {
Message message = Message.obtain();
message.what = 1;
handler.sendMessage(message);
//不存在sd卡
else if (Environment.getExternalStorageState()
.equals(Environment.MEDIA_UNMOUNTED)){
Message message=Message.obtain();
message.what=2;
handler.sendMessage(message);
//满足上两个条件
//获取网络输入流
bis = new BufferedInputStream(connection.getInputStream());
//文件大小
int length = connection.getContentLength();
progressDialog.setMax((int)length);
//缓冲区大小
byte[] buf = new byte[10];
int size =0;
//获取存储文件的路径,在该路径下新建一个文件为写入流作准备
File cfile = new File(getDirectory().getPath(), File_NAME);
//如果不存在则新建文件
if (!cfile.exists()) {
cfile.createNewFile();
//将流与文件绑定
fos = new FileOutputStream(cfile);
//记录进度条
int count=0;
//保存文件
while ((size = bis.read(buf)) != -1) {
fos.write(buf, 0, size);
if (length & 0) {
progressDialog.setProgress(count);
Log.d(&JSON&,count+&&);
Log.d(&JSON&,&HAHA&+cfile.getAbsolutePath()+cfile.getName());
Bundle bundle=new Bundle();
Message message=Message.obtain();
message.what=3;
bundle.putString(&msg&, cfile.getAbsolutePath());
message.setData(bundle);
handler.sendMessage(message);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (fos!= null) {
fos.close();
if (bis != null) {
bis.close();
if (connection!= null) {
connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}.start();
private static Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
Toast.makeText(mContext, &网络状态不可用&, Toast.LENGTH_SHORT).show();
Log.d(TAG, &网络不通&);
Toast.makeText(mContext, &请插入SD卡&, Toast.LENGTH_SHORT).show();
Log.d(TAG, &没有sd卡&);
Bundle bundle = msg.getData();
String fileName = bundle.getString(&msg&);
installAPK(fileName,mContext);
Log.d(TAG, &已经下载&);
* @param fileName
* @param mContext
private static void installAPK(String fileName,Context mContext){
File file =new File(fileName);
if(!file.exists()){
Intent intent=new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Intent.ACTION_VIEW);
Log.d(TAG,&AA&+&file://&+file.toString());
//&file://&+file.toString()下载的app的路径
intent.setDataAndType(Uri.parse(&file://&+file.toString()), &application/vnd.android.package-archive&);
mContext.startActivity(intent);
CommonAsyncTask
public class CommonAsyncTask extends AsyncTask{ //显示UI的 private Context mC //回调 private ListenerI //调用标识 private S //访问url private S private String httpF //post传参 private Map private final String TAG=&CommonAsyncTask&; public CommonAsyncTask(Context mContext){ this.mContext = mC } //onPreExecute方法用于在执行后台任务前做一些操作 protected void onPreExecute() { super.onPreExecute(); Log.i(TAG, &onPreExecute() called&); if (!(NetworkHelp.isConnected(mContext))) { Toast.makeText(mContext, &网络状态不可用&, Toast.LENGTH_SHORT).show(); } } //doInBackground方法内部执行后台任务,不可在此方法内修改UI @Override protected String doInBackground(String... params) { //get方法或者post方法的标识 httpFuntion= params[0]; url = params[1]; if(httpFuntion.equals(&post&)){ // flag =params[2]; // parameters = new HashMap&&(); // switch (flag) { // case &text& : // // parameters.put(&account&, params[3]); // // } return NetworkHelp.sendDataByPost(parameters, &utf-8&, url); } else{ return NetworkHelp.getDataByGet(&utf-8&, url); } } //onProgressUpdate方法用于更新进度信息 @Override protected void onProgressUpdate(Integer... progresses) { Log.i(TAG, &onProgressUpdate(Progress... progresses) called&); } //onPostExecute方法用于在执行完后台任务后更新UI,显示结果 @Override protected void onPostExecute(String result) { Log.i(TAG, &onPostExecute(Result result) called&); super.onPostExecute(result); //获取返回数据后给MainActivity listener = listener = ListenerImpl.getInstance(); listener.transferData(result); clear(); } @Override protected void onCancelled() { Log.i(TAG, &onCancelled() called&); } protected void clear(){ parameters = flag = url = httpFuntion = } }
NetWorkHelp
public class NetworkHelp {
private static final String TAG =&NetworkHelp&;
private static final int TIMEOUT_MILLIONS = 8000;
* 判断网络是否连接
* @param context
public static boolean isConnected(Context context)
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (null != connectivity)
NetworkInfo info = connectivity.getActiveNetworkInfo();
if (null != info && info.isConnected())
if (info.getState() == NetworkInfo.State.CONNECTED)
* 判断是否是wifi连接
public static boolean isWifi(Context context)
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null)
return connectivity.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI;
* Get funtion
* @param encode
* @param path
public static String getDataByGet(String encode, String path){
HttpURLConnection connection =
InputStream inptStream =
int responseC
url = new URL(path);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod(&GET&);
connection.setReadTimeout(TIMEOUT_MILLIONS);
connection.setConnectTimeout(TIMEOUT_MILLIONS);
connection.setDoInput(true);
connection.setUseCaches(false);
responseCode = connection.getResponseCode();
if(responseCode == HttpURLConnection.HTTP_OK) {
inptStream = connection.getInputStream();
Log.d(TAG,&GET FUNCTION OK&);
return dealResponseResult(inptStream,encode);
} catch (IOException e) {
return &err: & + e.getMessage().toString();
} finally {
if (connection != null) {
connection.disconnect();
if (inptStream != null) {
inptStream.close();
} catch (IOException e) {
e.printStackTrace();
return &&;
public static String sendDataByPost(Map params, String encode, String path) {
HttpURLConnection connection =
OutputStream outputStream =
InputStream inputStream =
int responseC
byte [] data = getRequestData(params, encode).toString().getBytes();
url = new URL(path);
connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod(&POST&);
connection.setConnectTimeout(TIMEOUT_MILLIONS);
connection.setReadTimeout(TIMEOUT_MILLIONS);
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestProperty(&Content-Type&, &application/x-www-form-urlencoded&);
connection.setRequestProperty(&Content-Length&, String.valueOf(data.length));
outputStream = connection.getOutputStream();
outputStream.write(data, 0, data.length);
responseCode = connection.getResponseCode();
if (responseCode == 200) {
Log.d(TAG,&POST FUNCTION OK&);
inputStream = connection.getInputStream();
return dealResponseResult(inputStream, encode);
} catch (Exception e) {
} finally {
if (outputStream != null) {
outputStream.close();
if (inputStream != null) {
inputStream.close();
if (connection != null) {
connection.disconnect();
} catch (Exception e) {
e.printStackTrace();
return &&;
public static StringBuffer getRequestData(Map params, String encode) {
StringBuffer buffer = new StringBuffer();
for (Map.Entry entry : params.entrySet()) {
buffer.append(entry.getKey())
.append(&=&)
.append(URLEncoder.encode(entry.getValue(), encode))
.append(&&&);
buffer.deleteCharAt(buffer.length() - 1);
} catch (Exception e) {
e.printStackTrace();
public static String dealResponseResult(InputStream inputStream, String encode) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte [] data = new byte[1024];
int lenngth = 0;
while ((lenngth = inputStream.read(data)) != -1) {
byteArrayOutputStream.write(data, 0, lenngth);
return new String(byteArrayOutputStream.toByteArray(), encode);
} catch (Exception e) {
e.printStackTrace();
return &&;
ConnectionUrl
public class ConnectionUrl { //获取版本号IP public static String GET_SERVER_IP = &https://192.168.0.62:3000/getVersion&; //下载app IP public static String DOWN_NEW_APP = &https://192.168.0.62:3000/updateApp&; }
服务器端(nodejs):
var express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/updateApp', function(req, res, next) { ///Users/tangjiarao/version2.apk是该版本2apk在你计算机中的路径 res.download(&/Users/tangjiarao/version2.apk&,&version2&); }); router.get('/getVersion', function(req, res, next) { //返回版本号 res.json({&Success&:200,&appVersion&:2}); }); module.exports =
进入程序界面&不更新&更新
安装&更新完成
问题:进入版本1app调用一次getServerVersion()调用一次,而更新版本2后,进入app捕抓不了mainActivy生命周期动作,并且调用两次getServerVersion()方法。
进入版本1app:
下载版本2后:
猜测:是否是因为广播接收器没有注销?

我要回帖

更多关于 qq怎么升级到最新版本 的文章

 

随机推荐