android 网络动态监听

这是Activity类:

public class MainActivity extends Activity {
private Utils utils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent();
setContentView(R.layout.linearlayout_activity_main);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION );
utils = new Utils();
intent = registerReceiver(utils, intentFilter);

}

这是Utils类:

public class Utils extends BroadcastReceiver {

private NetworkInfo isNetWorkConnected(Context context){
    ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
    if(networkInfo!= null){
        return networkInfo;
    }
    return null; 
}

@Override
public void onReceive(Context context, Intent intent) {
    NetworkInfo networkInfo = this.isNetWorkConnected(context);
    if(networkInfo != null && networkInfo.isAvailable()){
        System.out.println("有网络");
    }
}

}

问:

我现在想在MainActivity里获取到动态监听网络的状态,也就是要获取networkInfo,请教下,如何做?

2个回答

MainActivity.java:
package com.example.netlistener2;

import android.support.v7.app.ActionBarActivity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.......
答案就在这里:android网络监听
----------------------Hi,地球人,我是问答机器人小S,上面的内容就是我狂拽酷炫叼炸天的答案,除了赞同,你还有别的选择吗?

直接在oncreate里写,
NetworkInfo networkInfo = utils.isNetWorkConnected(context);
试下这样写行不行。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
android中如何监听到其他应用的网络请求数据?
android中如何监听到其他应用的网络请求数据,比如说我可监听到某一个应用的请求的url
Android网络监听,怎么样监听在网络好的时候上传图片到服务器
现在的需求是: 用户拍照上传压缩后的图片, 但是不能确保用户的网络状况。如果网络状况不好,图片上传容易失败,待网络变好执行上传。 问题:如何监听网络变好?4G和wifi状况也不一定网络通畅。 我的思路是第一次上传失败后建立长连接 每隔1分钟开启上传一次。 网络良好到一定要ping的到地址的。 除此之外还有没有成熟的监听网络变好,变通畅的 框架 或者方案。
Android 如何实现动态监听连接手机的蓝牙设备是否因为某些原因断开
Android蓝牙API提供的方法中,isconnected(),基本做不到实时检测连接状态,其他的方法,等到的也是设备绑定的状态,并不是我想要的。本来通过写或读数据是可以判断连接状态的,但是,自己起线程轮询的收发数据过去,判断读写异常时可以实现,但是会影响用户发送的数据,业务要求不允许。网络连接中有NetSocket.sendUrgentData(0)这个方法可以做到,偏偏蓝牙又没有,我该怎么做,求指点!
系统中实时监听android的网络状态并且给予处理
比如 在一个android小程序中 发现网络断了就给予页面跳转
Android中的RadioGroup,在选择之前做监听应使用什么?
Android中的RadioGroup,想要实现这样的操作:比如说有一个radiogroup,里面有2个radiobutton,分别为男、女。现在我在点击男的时候想要先做一下网络判断,看是否联网,如果没有联网的话, 提示无网络连接,且使男这个buton仍然处于为选中状态。 请问我应该使用什么监听来进行网络连接判断的操作。首先不能使用OnCheckedChangeListener()这个监听,因为这个监听按钮的选中状态就已经改变了,试了下onClickListener(),也不可以,OnFocusChangeListener()也不可以。或是说如果不用监听的话这个操作可以如何实现?谢谢。
这程序哪里是在监听网络变化
![图片说明](https://img-ask.csdn.net/upload/201704/26/1493179538_255612.png) ![图片说明](https://img-ask.csdn.net/upload/201704/26/1493179562_502919.jpg) 按书上所说,按Home键,然后启动和禁用网络,不出现toast 可是按返回键,回到桌面就出现toast,如下图: ![图片说明](https://img-ask.csdn.net/upload/201704/26/1493179775_154334.png) ``` package com.example.broadcasttest; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; public class MainActivity extends Activity { private boolean mReceiverTag=false; private IntentFilter intentFilter; private NetworkChangeReceiver networkChangeReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intentFilter=new IntentFilter(); intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); networkChangeReceiver=new NetworkChangeReceiver(); } @Override protected void onDestroy() { super.onDestroy(); if(!mReceiverTag) { mReceiverTag=true; registerReceiver(networkChangeReceiver,intentFilter); } else { mReceiverTag=false; unregisterReceiver(networkChangeReceiver); } } class NetworkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context,Intent intent) { Toast.makeText(context, "network changes", Toast.LENGTH_SHORT).show(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } ``` 如果是这样的话,这程序哪里是在监听网络变化?
android 开发中界面的跳转
我想设置一个监听器直接跳到android模拟器自带的无线和网络设置(Wireless&networks)界面,请大神帮个忙
Android Studio 应用无法访问本地服务器
代码在android studio 模拟器运行后本地服务器监听不到访问,可以确定后端代码没有问题,并且模拟器网络正常,可以使用模拟器里的浏览器访问服务器。 应用也添加了网络访问权限。 ``` <uses-permission android:name="android.permission.INTERNET" /> ``` 代码: ``` public class MainActivity extends AppCompatActivity { private TextView tvContent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvContent = (TextView) findViewById(R.id.test1); // 这里页面上就一个简单的TextView,用于展示获取到报文内容 requestUsingHttpURLConnection(); } private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { if(msg.what == 1){ tvContent.setText(msg.obj.toString()); } } }; private void requestUsingHttpURLConnection() { // 网络通信属于典型的耗时操作,开启新线程进行网络请求 new Thread(new Runnable() { @Override public void run() { HttpURLConnection connection = null; try { URL url = new URL("http://10.0.2.2:8080/ServletTest/RegisterServlet?account=123&password=abc"); // 声明一个URL,注意——如果用百度首页实验,请使用https //http://10.20.4.178:8080/ServletTest/RegisterServlet?account=123&password=abc Log.d("test", "开始连接"); connection = (HttpURLConnection) url.openConnection(); // 打开该URL连接 connection.setRequestMethod("GET"); // 设置请求方法,“POST或GET”,我们这里用GET,在说到POST的时候再用POST connection.setConnectTimeout(8000); // 设置连接建立的超时时间 connection.setReadTimeout(8000); // 设置网络报文收发超时时间 InputStream in = connection.getInputStream(); // 通过连接的输入流获取下发报文,然后就是Java的流处理 Log.d("test", "获取连接"); BufferedReader reader = new BufferedReader(new InputStreamReader(in)); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } Message msg = new Message(); msg.what = 1; msg.obj = response.toString(); Log.d("test", response.toString()); handler.sendMessage(msg); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }).start(); } } ``` URL应该没有问题,我通过日志输出的URL可以在模拟器浏览器成功访问服务器 ``` public class Consatant { public static String URL = "http://10.0.2.2:8080/ServletTest/"; // IP地址请改为你自己的IP public static String URL_Register = URL + "RegisterServlet"; public static String URL_Login = URL + "LoginServlet"; } ```
急求,我现在Android 集成Vitamio直播网络视频一段时间就停止,点击也不能继续播放
Android 集成Vitamio 直播网络视频m3u8流,一段时间就停止,点击也不能继续播放,必须退出activity页面再进来这个activity播放界面之后进来才能继续播放, .开始我们怀疑是缓冲问题,为了证实是否是缓冲问题,我们获取缓冲监听OnBufferingUpdateListener 和setOnInfoListener,打log,发现不是在缓冲状态下,而是正常播放状态下卡住.急求!!
监听网络变化的程序,Toast功能出不来,报错也不知道怎么拯救这个错误
package com.example.broadcasttest; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.NetworkOnMainThreadException; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private IntentFilter intentFilter; private NetworkChangeReceiver networkChangeReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intentFilter = new IntentFilter(); intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); networkChangeReceiver = new NetworkChangeReceiver(); registerReceiver(networkChangeReceiver, intentFilter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(networkChangeReceiver); } class NetworkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connectionManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectionManager.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isAvailable()) { Toast.makeText(context, "network is available", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(context, "network is unavailable", Toast.LENGTH_SHORT).show(); } } } } AndroidManifest <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.broadcasttest"> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 报错 02-26 02:59:02.161 1590-1590/? I/art: Late-enabling -Xcheck:jni 02-26 02:59:02.162 1590-1590/? W/art: Unexpected CPU variant for X86 using defaults: x86 02-26 02:59:02.705 1590-1590/com.example.broadcasttest W/System: ClassLoader referenced unknown path: /data/app/com.example.broadcasttest-1/lib/x86 02-26 02:59:02.983 1590-1590/com.example.broadcasttest W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable [ 02-26 02:59:03.293 1590: 1590 D/ ] HostConnection::get() New Host Connection established 0xe5cf49c0, tid 1590 [ 02-26 02:59:03.451 1590: 1590 W/ ] Process pipe failed 02-26 02:59:03.573 1590-1605/com.example.broadcasttest D/libEGL: Emulator has host GPU support, qemu.gles is set to 1. 02-26 02:59:03.575 1590-1605/com.example.broadcasttest E/libEGL: load_driver(/system/lib/egl/libGLES_emulation.so): dlopen failed: library "/system/lib/egl/libGLES_emulation.so" not found 02-26 02:59:03.579 1590-1605/com.example.broadcasttest D/libEGL: loaded /system/lib/egl/libEGL_emulation.so 02-26 02:59:03.582 1590-1605/com.example.broadcasttest D/libEGL: loaded /system/lib/egl/libGLESv1_CM_emulation.so 02-26 02:59:03.613 1590-1605/com.example.broadcasttest D/libEGL: loaded /system/lib/egl/libGLESv2_emulation.so 02-26 02:59:03.818 1590-1605/com.example.broadcasttest I/OpenGLRenderer: Initialized EGL, version 1.4 02-26 02:59:03.818 1590-1605/com.example.broadcasttest D/OpenGLRenderer: Swap behavior 1 02-26 02:59:04.294 1590-1605/com.example.broadcasttest E/EGL_emulation: tid 1605: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH) 02-26 02:59:04.294 1590-1605/com.example.broadcasttest W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xcc924180, error=EGL_BAD_MATCH 02-26 02:59:04.309 1590-1590/com.example.broadcasttest I/Choreographer: Skipped 32 frames! The application may be doing too much work on its main thread. 02-26 02:59:05.625 1590-1605/com.example.broadcasttest E/EGL_emulation: tid 1605: eglSurfaceAttrib(1174): error 0x3009 (EGL_BAD_MATCH) 02-26 02:59:05.625 1590-1605/com.example.broadcasttest W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xcc924400, error=EGL_BAD_MATCH
Android 局域网IP对讲机如何扩展成为外网IP对讲?
现在的架构是:Android设备2台,路由器一个。 1、双方使用socket开启端口监听网络的音频数据。 2、填写对方IP(路由器下的内网) 3、发送音频数据到对方端口。IP+port 现在希望可以扩展成为不在一个路由器下进行通讯。
Android经纬度获取不到?
权限: ``` uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" uses-permission android:name="android.permission.INTERNET" ``` 代码: ``` @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); editText = (EditText) findViewById(R.id.editText); lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); // 为获取地理位置信息时设置查询条件 String bestProvider = lm.getBestProvider(getCriteria(), true); // 获取位置信息 // 如果不设置查询要求,getLastKnownLocation方法传人的参数为LocationManager.GPS_PROVIDER Location location = lm.getLastKnownLocation(bestProvider); updateView(location); // 监听状态 lm.addGpsStatusListener(listener); // 绑定监听,有4个参数 // 参数1,设备:有GPS_PROVIDER和NETWORK_PROVIDER两种 // 参数2,位置信息更新周期,单位毫秒 // 参数3,位置变化最小距离:当位置距离变化超过此值时,将更新位置信息 // 参数4,监听 // 备注:参数2和3,如果参数3不为0,则以参数3为准;参数3为0,则通过时间来定时更新;两者为0,则随时刷新 // 1秒更新一次,或最小位移变化超过1米更新一次; // 注意:此处更新准确度非常低,推荐在service里面启动一个Thread,在run中sleep(10000);然后执行handler.sendMessage(),更新位置 if (lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) { lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, locationListener); Log.i("gps123", "gps定位location=" + location); } else { lm.requestLocationUpdates(bestProvider, 1000, 1, locationListener); Log.i("gps123", "网络定位 location=" + location); } } // 位置监听 private LocationListener locationListener = new LocationListener() { /** * 位置信息变化时触发 */ @Override public void onLocationChanged(Location location) { updateView(location); Log.i(TAG, "时间:" + location.getTime()); Log.i(TAG, "经度:" + location.getLongitude()); Log.i(TAG, "纬度:" + location.getLatitude()); Log.i(TAG, "海拔:" + location.getAltitude()); } /** * GPS状态变化时触发 */ @Override public void onStatusChanged(String provider, int status, Bundle extras) { switch (status) { // GPS状态为可见时 case LocationProvider.AVAILABLE: Log.i(TAG, "当前GPS状态为可见状态"); break; // GPS状态为服务区外时 case LocationProvider.OUT_OF_SERVICE: Log.i(TAG, "当前GPS状态为服务区外状态"); break; // GPS状态为暂停服务时 case LocationProvider.TEMPORARILY_UNAVAILABLE: Log.i(TAG, "当前GPS状态为暂停服务状态"); break; } } /** * GPS开启时触发 */ @Override public void onProviderEnabled(String provider) { Location location = lm.getLastKnownLocation(provider); Log.i(TAG, "开启 " + location); updateView(location); } /** * GPS禁用时触发 */ @Override public void onProviderDisabled(String provider) { Location location = lm.getLastKnownLocation(provider); Log.i(TAG, "关闭 " + location); updateView(location); } }; // 状态监听 GpsStatus.Listener listener = new GpsStatus.Listener() { @Override public void onGpsStatusChanged(int event) { switch (event) { // 第一次定位 case GpsStatus.GPS_EVENT_FIRST_FIX: Log.i(TAG, "第一次定位"); break; // 卫星状态改变 case GpsStatus.GPS_EVENT_SATELLITE_STATUS: Log.i(TAG, "卫星状态改变"); // 获取当前状态 GpsStatus gpsStatus = lm.getGpsStatus(null); // 获取卫星颗数的默认最大值 int maxSatellites = gpsStatus.getMaxSatellites(); // 创建一个迭代器保存所有卫星 Iterator<GpsSatellite> iters = gpsStatus.getSatellites() .iterator(); int count = 0; while (iters.hasNext() && count <= maxSatellites) { // GpsSatellite s = iters.next(); iters.next(); count++; } System.out.println("搜索到:" + count + "颗卫星"); break; // 定位启动 case GpsStatus.GPS_EVENT_STARTED: Log.i(TAG, "定位启动"); break; // 定位结束 case GpsStatus.GPS_EVENT_STOPPED: Log.i(TAG, "定位结束"); break; } }; }; /** * 实时更新文本内容 * * @param location */ private void updateView(Location location) { if (location != null) { editText.setText("设备位置信息\n\n经度:"); editText.append(String.valueOf(location.getLongitude())); editText.append("\n纬度:"); editText.append(String.valueOf(location.getLatitude())); Geocoder geo = new Geocoder(this); try { List<Address> list = geo.getFromLocation( location.getLatitude(), location.getLongitude(), 1); if (!list.isEmpty()) { String country = list.get(0).getCountryName(); String address = list.get(0).getAddressLine(0); editText.append("\n国家:" + country + "\n地址:" + address); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } else { // 清空EditText对象 // editText.getEditableText().clear(); editText.setText("没有收到信号"); lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 1, locationListener); } } /** * 返回查询条件 * * @return */ private Criteria getCriteria() { Criteria criteria = new Criteria(); // 设置定位精确度 Criteria.ACCURACY_COARSE比较粗略,Criteria.ACCURACY_FINE则比较精细 criteria.setAccuracy(Criteria.ACCURACY_FINE); // 设置是否要求速度 criteria.setSpeedRequired(false); // 设置是否允许运营商收费 criteria.setCostAllowed(false); // 设置是否需要方位信息 criteria.setBearingRequired(false); // 设置是否需要海拔信息 criteria.setAltitudeRequired(false); // 设置对电源的需求 criteria.setPowerRequirement(Criteria.POWER_LOW); return criteria; } ```
用okhttp实现断点续传,网络请求进OnFailure,急急急,大神们
ProgressDownloader类 ``` public class ProgressDownloader { public static final String TAG = "TestProgressDownloader"; private ProgressResponseBody.ProgressListener progressListener; private String url; private OkHttpClient client; private File destination; private Call call; public ProgressDownloader(String url, File destination, ProgressResponseBody.ProgressListener progressListener) { this.url = url; this.destination = destination; this.progressListener = progressListener; //在下载、暂停后的继续下载中可复用同一个client对象 client = getProgressClient(); } //每次下载需要新建新的Call对象 private Call newCall(long startPoints) { Request request = new Request.Builder() .get() .url(url) .header("RANGE", "bytes=" + startPoints + "-")//断点续传要用到的,指示下载的区间 .build(); return client.newCall(request); } public OkHttpClient getProgressClient() { // 拦截器,用上ProgressResponseBody Interceptor interceptor = new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Response originalResponse = chain.proceed(chain.request()); return originalResponse.newBuilder() .body(new ProgressResponseBody(originalResponse.body(), progressListener)) .build(); } }; return new OkHttpClient.Builder() .addNetworkInterceptor(interceptor) .build(); } //startsPoint指定开始下载的点 public void download(final long startsPoint) { call = newCall(startsPoint); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.e("=======================","fail"); } @Override public void onResponse(Call call, Response response) throws IOException { Log.e("=======================","pass"); } }); } public void pause() { if(call!=null){ call.cancel(); } } private void save(Response response, long startsPoint) { ResponseBody body = response.body(); InputStream in = body.byteStream(); FileChannel channelOut = null; // 随机访问文件,可以指定断点续传的起始位置 RandomAccessFile randomAccessFile = null; try { randomAccessFile = new RandomAccessFile(destination, "rwd"); //Chanel NIO中的用法,由于RandomAccessFile没有使用缓存策略,直接使用会使得下载速度变慢,亲测缓存下载3.3秒的文件,用普通的RandomAccessFile需要20多秒。 channelOut = randomAccessFile.getChannel(); // 内存映射,直接使用RandomAccessFile,是用其seek方法指定下载的起始位置,使用缓存下载,在这里指定下载位置。 MappedByteBuffer mappedBuffer = channelOut.map(FileChannel.MapMode.READ_WRITE, startsPoint, body.contentLength()); byte[] buffer = new byte[1024]; int len; while ((len = in.read(buffer)) != -1) { mappedBuffer.put(buffer, 0, len); } } catch (IOException e) { e.printStackTrace(); }finally { try { in.close(); if (channelOut != null) { channelOut.close(); } if (randomAccessFile != null) { randomAccessFile.close(); } } catch (IOException e) { e.printStackTrace(); } } } } ``` MainActivity类 ``` /** * 1.添加依赖 * 2.生成带进度监听的ProgressResponseBody * 3.创建ProgressDownloader * 4.清单文件中添加网络权限和文件访问权限 */ public class MainActivity extends AppCompatActivity implements ProgressResponseBody.ProgressListener{ public static final String TAG = "MainActivity"; public static final String PACKAGE_URL = "http://gdown.baidu.com/data/wisegame/df65a597122796a4/weixin_821.apk"; @Bind(R.id.progressBar) ProgressBar progressBar; private long breakPoints; private ProgressDownloader downloader; private File file; private long totalBytes; private long contentLength; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); } @OnClick({R.id.downloadButton, R.id.cancel_button, R.id.continue_button}) public void onClick(View view) { switch (view.getId()) { case R.id.downloadButton: // 新下载前清空断点信息 breakPoints = 0L; file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "sample.apk"); downloader = new ProgressDownloader(PACKAGE_URL, file, this); downloader.download(0L); break; case R.id.cancel_button: downloader.pause(); Toast.makeText(this, "下载暂停", Toast.LENGTH_SHORT).show(); // 存储此时的totalBytes,即断点位置。 breakPoints = totalBytes; break; case R.id.continue_button: downloader.download(breakPoints); break; } } @Override public void onPreExecute(long contentLength) { // 文件总长只需记录一次,要注意断点续传后的contentLength只是剩余部分的长度 if (this.contentLength == 0L) { this.contentLength = contentLength; progressBar.setMax((int) (contentLength / 1024)); } } @Override public void update(long totalBytes, boolean done) { // 注意加上断点的长度 this.totalBytes = totalBytes + breakPoints; progressBar.setProgress((int) (totalBytes + breakPoints) / 1024); if (done) { // 切换到主线程 Observable .empty() .observeOn(AndroidSchedulers.mainThread()) .doOnCompleted(new Action0() { @Override public void call() { Toast.makeText(MainActivity.this, "下载完成", Toast.LENGTH_SHORT).show(); } }) .subscribe(); } } } ``` 代码链接:https://blog.csdn.net/halaoda/article/details/78502693
求助大神android 布局文件中的fitsystemwindows是的运行机制
项目中有用到需要将app的手机状态栏设置成和标题栏一样的颜色,使用了github上的一个库去设置了颜色,并在布局文件中使用了fitsystemwindows="true",该动作在第一次setcontentview的时候时起作用的,我的使用场景是在检测到有网络的时候正常加载界面,没有网络的时候就加载无网络提示的界面,难点来了,在没有网络的时候加载无网络提示界面显示正常,但打开网络,点击重试同时去加载正常界面的时候感觉好像是fitsystemwindows=true的属性不起作用了,标题被状态栏挡住了。并且还有一个网络监听的机制,监听到有网络的时候同时也是跳转到加载数据的界面,同样的问题 ![图片说明](https://img-ask.csdn.net/upload/201611/11/1478849117_944323.png) ![图片说明](https://img-ask.csdn.net/upload/201611/11/1478849163_214911.png)
android与PC用socket通信
写了一个小的测试程序,android手机和PC进行通信。 服务器(PC)端代码: public class SimpleServer { public static void main(String[] args) throws IOException { // 创建一个ServerSocket,用于监听客户端Socket的连接请求 ServerSocket ss = new ServerSocket(30000); //① // 采用循环不断接受来自客户端的请求 while (true) { // 每当接受到客户端Socket的请求,服务器端也对应产生一个Socket Socket s = ss.accept(); OutputStream os = s.getOutputStream(); os.write("您好,您收到了服务器的新年祝福!\n" .getBytes("utf-8")); // 关闭输出流,关闭Socket os.close(); s.close(); } } } 客户端(android)代码: public class SimpleClient extends Activity { EditText show; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); show = (EditText) findViewById(R.id.show); new Thread() { @Override public void run() { try { // �������ӵ�Զ�̷�������Socket Socket socket = new Socket("192.168.0.100" , 30000); //�� // ��Socket��Ӧ����������װ��BufferedReader BufferedReader br = new BufferedReader( new InputStreamReader(socket.getInputStream())); // ������ͨIO���� String line = br.readLine(); show.setText("���Է���������ݣ�" + line); // �ر���������socket br.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }.start(); } } 先启动PC机上的服务端,再启动安卓手机客户端,结果客户端无反应。 初步判断应该是客户端socket构造函数里的第一个参数IP地址错误,请问这个地址应该填公网地址还是本地局域网地址?(网络环境:路由器宽带接入,PC有线接路由器,Android无线连WIFI)
Tcpdump可否实现远端监听多部移动设备
如题,我想在一台主机上监听多部安卓设备 而且安卓设备与主机不在同一子网
Android 基于openfire开发的报错问题:Already Login to Server
在Android 客户端开发openfire即时聊天的时候,需求中有切换不同的用户的要求。 (注册用户没有问题) 登录的时候我是这样做的:connectServer-->login 下线的时候我是这么做的:disConnectServer 如果是有一个用户切换到另外一个用户,那么我是这样做的:disConnectServer-->connectServer-->login 由于网络等原因,会出现这样的情况,导致程序闪退:1.not connect to server 2.Already login to server 情况1、2出现的语句都是在login的时候。(ps:我在网络断开后重新连接网络时会去进行重新登录连接,我加了断线重连的监听,但是网络断线恢复后自动重新连接上的速度很慢,所以就自己手动重连) 所以想问一下,如何安全的确保已经成功连接上服务器的时候去登录、或者已经登录过了,那么就不再去登录 附1:登录代码 ` if (!xmppTool.isConnectedServer()) { xmppTool.connServer(); } if (xmppTool.isConnectedServer() && !xmppTool.getCon().isAuthenticated()) { xmppTool.login(name, PWD); ` 附2:下线代码 if (xmppTool.isConnectedServer()) xmppTool.disConnectedServer(); 附3:切换用户代码: if (xmppTool.isConnectedServer()) xmppTool.disConnectedServer(); `if (!xmppTool.isConnectedServer()) { xmppTool.connServer(); } if (xmppTool.isConnectedServer() && !xmppTool.getCon().isAuthenticated()) { xmppTool.login(newName, PWD); `
Android 如何模糊查询数据库其中一列,并将对应结果显示在list中
已经建好一个数据库并且在data/data/packagename/下。 现在在学习绑定了按钮监听并且查询,但是模拟到按查询button时就程序自动退出 public void onClick(View v) { test = SQLiteDatabase.openOrCreateDatabase( "data/data/com.example.ediantong/test.db", null); String key = et.getText().toString(); String sql = "Select type from table22 where price="+"%"+key+"%"; Cursor c = test.rawQuery(sql,null); c.moveToFirst(); //SimpleCursorAdapter适配器 SimpleCursorAdapter test = new SimpleCursorAdapter(test.this, android.R.layout.simple_list_item_2, c, new String[] {"un", "an" }, new int[] { android.R.id.text1, android.R.id.text2 }); lv.setAdapter(test); } 我是照着网络上代码改的,数据库有android_matadata表,table22 也有_id 主键了。
Android 华为机顶盒应用自启动问题
目前所使用的设备是华为机顶盒,需求是能够开机启动。可是可恶的华为似乎屏蔽掉了开机广播。 监听了开机、存储挂载、媒体文件扫描等等十几个广播均无反应。 我知道安装后需要手动启动一次才能接受到系统广播,但从没遇见过这种坑。 机顶盒没有网络广播,没有信号广播,没有电量变化广播,时间流逝广播也只能动态注册。 基本上已经放弃从广播入手了,想着获取系统app的身份后应该才能接收到开机广播。但必须得root,这个要求有些苛刻。 各位大神你们有什么奇淫巧技,跪求啊
终于明白阿里百度这样的大公司,为什么面试经常拿ThreadLocal考验求职者了
点击上面↑「爱开发」关注我们每晚10点,捕获技术思考和创业资源洞察什么是ThreadLocalThreadLocal是一个本地线程副本变量工具类,各个线程都拥有一份线程私有的数
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
此博客仅为我业余记录文章所用,发布到此,仅供网友阅读参考,如有侵权,请通知我,我会删掉。 补充 有不少读者留言说本文章没有用,因为天气预报直接打开手机就可以收到了,为何要多此一举发送到邮箱呢!!!那我在这里只能说:因为你没用,所以你没用!!! 这里主要介绍的是思路,不是天气预报!不是天气预报!!不是天气预报!!!天气预报只是用于举例。请各位不要再刚了!!! 下面是我会用到的两个场景: 每日下
死磕YOLO系列,YOLOv1 的大脑、躯干和手脚
YOLO 是我非常喜欢的目标检测算法,堪称工业级的目标检测,能够达到实时的要求,它帮我解决了许多实际问题。 这就是 YOLO 的目标检测效果。它定位了图像中物体的位置,当然,也能预测物体的类别。 之前我有写博文介绍过它,但是每次重新读它的论文,我都有新的收获,为此我准备写一个系列的文章来详尽分析它。这是第一篇,从它的起始 YOLOv1 讲起。 YOLOv1 的论文地址:https://www.c...
知乎高赞:中国有什么拿得出手的开源软件产品?(整理自本人原创回答)
知乎高赞:中国有什么拿得出手的开源软件产品? 在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?” 事实上,还不少呢~ 本人于2019.7.6进行了较为全面的回答,对这些受欢迎的 Github 开源项目分类整理如下: 分布式计算、云平台相关工具类 1.SkyWalking,作者吴晟、刘浩杨 等等 仓库地址: apache/skywalking 更...
20行Python代码爬取王者荣耀全英雄皮肤
引言 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了。我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成。 准备工作 爬取皮肤本身并不难,难点在于分析,我们首先得得到皮肤图片的url地址,话不多说,我们马上来到王者荣耀的官网: 我们点击英雄资料,然后随意地选择一位英雄,接着F12打开调试台,找到英雄原皮肤的图片...
简明易理解的@SpringBootApplication注解源码解析(包含面试提问)
欢迎关注文章系列 ,关注我 《提升能力,涨薪可待》 《面试知识,工作可待》 《实战演练,拒绝996》 欢迎关注我博客,原创技术文章第一时间推出 也欢迎关注公 众 号【Ccww笔记】,同时推出 如果此文对你有帮助、喜欢的话,那就点个赞呗,点个关注呗! 《提升能力,涨薪可待篇》- @SpringBootApplication注解源码解析 一、@SpringBootApplication 的作用是什...
西游记团队中如果需要裁掉一个人,会先裁掉谁?
2019年互联网寒冬,大批企业开始裁员,下图是网上流传的一张截图: 裁员不可避免,那如何才能做到不管大环境如何变化,自身不受影响呢? 我们先来看一个有意思的故事,如果西游记取经团队需要裁员一名,会裁掉谁呢,为什么? 西游记团队组成: 1.唐僧 作为团队teamleader,有很坚韧的品性和极高的原则性,不达目的不罢休,遇到任何问题,都没有退缩过,又很得上司支持和赏识(直接得到唐太宗的任命,既给袈...
Python语言高频重点汇总
Python语言高频重点汇总 GitHub面试宝典仓库 回到首页 目录: Python语言高频重点汇总 目录: 1. 函数-传参 2. 元类 3. @staticmethod和@classmethod两个装饰器 4. 类属性和实例属性 5. Python的自省 6. 列表、集合、字典推导式 7. Python中单下划线和双下划线 8. 格式化字符串中的%和format 9. 迭代器和生成器 10...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观
程序员一般通过什么途径接私活?
二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗? 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。 我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个称号啊。毕竟苍蝇再小也是肉,我也算是有经验的人了。 唾弃接私活、做外
ES6基础-ES6的扩展
进行对字符串扩展,正则扩展,数值扩展,函数扩展,对象扩展,数组扩展。 开发环境准备: 编辑器(VS Code, Atom,Sublime)或者IDE(Webstorm) 浏览器最新的Chrome 字符串的扩展: 模板字符串,部分新的方法,新的unicode表示和遍历方法: 部分新的字符串方法 padStart,padEnd,repeat,startsWith,endsWith,includes 字...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple/ 
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
你知道的越多,你不知道的越多 点赞再看,养成习惯 本文 GitHub https://github.com/JavaFamily 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习,希望我们一起有点东西。 前前言 为啥今天有个前前言呢? 因为你们的丙丙啊,昨天有牌面了哟,直接被微信官方推荐,知乎推荐,也就仅仅是还行吧(心里乐开花)
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca
Python爬虫精简步骤1 获取数据
爬虫的工作分为四步: 1.获取数据。爬虫程序会根据我们提供的网址,向服务器发起请求,然后返回数据。 2.解析数据。爬虫程序会把服务器返回的数据解析成我们能读懂的格式。 3.提取数据。爬虫程序再从中提取出我们需要的数据。 4.储存数据。爬虫程序把这些有用的数据保存起来,便于你日后的使用和分析。 这一篇的内容就是:获取数据。 首先,我们将会利用一个强大的库——requests来获取数据。 在电脑上安装
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东
破14亿,Python分析我国存在哪些人口危机!
2020年1月17日,国家统计局发布了2019年国民经济报告,报告中指出我国人口突破14亿。 猪哥的朋友圈被14亿人口刷屏,但是很多人并没有看到我国复杂的人口问题:老龄化、男女比例失衡、生育率下降、人口红利下降等。 今天我们就来分析一下我们国家的人口数据吧! 更多有趣分析教程,扫描下方二维码关注vx公号「裸睡的猪」 即可查看! 一、背景 1.人口突破14亿 2020年1月17日,国家统计局发布
web前端javascript+jquery知识点总结
Javascript javascript 在前端网页中占有非常重要的地位,可以用于验证表单,制作特效等功能,它是一种描述语言,也是一种基于对象(Object)和事件驱动并具有安全性的脚本语言 ,语法同java类似,是一种解释性语言,边执行边解释。 JavaScript的组成: ECMAScipt 用于描述: 语法,变量和数据类型,运算符,逻辑控制语句,关键字保留字,对象。 浏览器对象模型(Br
Qt实践录:开篇
本系列文章介绍笔者的Qt实践之路。
在家远程办公效率低?那你一定要收好这个「在家办公」神器!
相信大家都已经收到国务院延长春节假期的消息,接下来,在家远程办公可能将会持续一段时间。 但是问题来了。远程办公不是人在电脑前就当坐班了,相反,对于沟通效率,文件协作,以及信息安全都有着极高的要求。有着非常多的挑战,比如: 1在异地互相不见面的会议上,如何提高沟通效率? 2文件之间的来往反馈如何做到及时性?如何保证信息安全? 3如何规划安排每天工作,以及如何进行成果验收? ......
作为一个程序员,内存和磁盘的这些事情,你不得不知道啊!!!
截止目前,我已经分享了如下几篇文章: 一个程序在计算机中是如何运行的?超级干货!!! 作为一个程序员,CPU的这些硬核知识你必须会! 作为一个程序员,内存的这些硬核知识你必须懂! 这些知识可以说是我们之前都不太重视的基础知识,可能大家在上大学的时候都学习过了,但是嘞,当时由于老师讲解的没那么有趣,又加上这些知识本身就比较枯燥,所以嘞,大家当初几乎等于没学。 再说啦,学习这些,也看不出来有什么用啊!
这个世界上人真的分三六九等,你信吗?
偶然间,在知乎上看到一个问题 一时间,勾起了我深深的回忆。 以前在厂里打过两次工,做过家教,干过辅导班,做过中介。零下几度的晚上,贴过广告,满脸、满手地长冻疮。   再回首那段岁月,虽然苦,但让我学会了坚持和忍耐。让我明白了,在这个世界上,无论环境多么的恶劣,只要心存希望,星星之火,亦可燎原。   下文是原回答,希望能对你能有所启发。   如果我说,这个世界上人真的分三六九等,
为什么听过很多道理,依然过不好这一生?
记录学习笔记是一个重要的习惯,不希望学习过的东西成为过眼云烟。做总结的同时也是一次复盘思考的过程。 本文是根据阅读得到 App上《万维钢·精英日课》部分文章后所做的一点笔记和思考。学习是一个系统的过程,思维模型的建立需要相对完整的学习和思考过程。以下观点是在碎片化阅读后总结的一点心得总结。
B 站上有哪些很好的学习资源?
哇说起B站,在小九眼里就是宝藏般的存在,放年假宅在家时一天刷6、7个小时不在话下,更别提今年的跨年晚会,我简直是跪着看完的!! 最早大家聚在在B站是为了追番,再后来我在上面刷欧美新歌和漂亮小姐姐的舞蹈视频,最近两年我和周围的朋友们已经把B站当作学习教室了,而且学习成本还免费,真是个励志的好平台ヽ(.◕ฺˇд ˇ◕ฺ;)ノ 下面我们就来盘点一下B站上优质的学习资源: 综合类 Oeasy: 综合
雷火神山直播超两亿,Web播放器事件监听是怎么实现的?
Web播放器解决了在手机浏览器和PC浏览器上播放音视频数据的问题,让视音频内容可以不依赖用户安装App,就能进行播放以及在社交平台进行传播。在视频业务大数据平台中,播放数据的统计分析非常重要,所以Web播放器在使用过程中,需要对其内部的数据进行收集并上报至服务端,此时,就需要对发生在其内部的一些播放行为进行事件监听。 那么Web播放器事件监听是怎么实现的呢? 01 监听事件明细表 名
3万字总结,Mysql优化之精髓
本文知识点较多,篇幅较长,请耐心学习 MySQL已经成为时下关系型数据库产品的中坚力量,备受互联网大厂的青睐,出门面试想进BAT,想拿高工资,不会点MySQL优化知识,拿offer的成功率会大大下降。 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计
一条链接即可让黑客跟踪你的位置! | Seeker工具使用
搬运自:冰崖的部落阁(icecliffsnet) 严正声明:本文仅限于技术讨论,严禁用于其他用途。 请遵守相对应法律规则,禁止用作违法途径,出事后果自负! 上次写的防社工文章里边提到的gps定位信息(如何防止自己被社工或人肉) 除了主动收集他人位置信息以外,我们还可以进行被动收集 (没有技术含量) Seeker作为一款高精度地理位置跟踪工具,同时也是社交工程学(社会工程学)爱好者...
作为程序员的我,大学四年一直自学,全靠这些实用工具和学习网站!
我本人因为高中沉迷于爱情,导致学业荒废,后来高考,毫无疑问进入了一所普普通通的大学,实在惭愧...... 我又是那么好强,现在学历不行,没办法改变的事情了,所以,进入大学开始,我就下定决心,一定要让自己掌握更多的技能,尤其选择了计算机这个行业,一定要多学习技术。 在进入大学学习不久后,我就认清了一个现实:我这个大学的整体教学质量和学习风气,真的一言难尽,懂的人自然知道怎么回事? 怎么办?我该如何更好的提升
前端JS初级面试题二 (。•ˇ‸ˇ•。)老铁们!快来瞧瞧自己都会了么
1. 传统事件绑定和符合W3C标准的事件绑定有什么区别? 传统事件绑定 &lt;div onclick=""&gt;123&lt;/div&gt; div1.onclick = function(){}; &lt;button onmouseover=""&gt;&lt;/button&gt; 注意: 如果给同一个元素绑定了两次或多次相同类型的事件,那么后面的绑定会覆盖前面的绑定 (不支持DOM事...
相关热词 c# 识别回车 c#生成条形码ean13 c#子控制器调用父控制器 c# 写大文件 c# 浏览pdf c#获取桌面图标的句柄 c# list反射 c# 句柄 进程 c# 倒计时 线程 c# 窗体背景色
立即提问