安装手机防护软件
腾讯手机管家、360手机卫士、手机毒霸等防护软件都有出色表现,为用户提供隐私保护、隐私监控等全方面的隐私保护功能,可有效确保手机中的个人信息不被恶意程序窃取。定期扫面手机程序,开启应用安装检测功能,实时监测软件的安装tulaoShi.com是否存在恶意行为。
谨慎刷机
目前,刷机盛行,手机控们更是乐此不疲的享受刷机的乐趣,本人也不例外。但是,在刷机前,要鉴别手机ROM包中是否存在恶意代码,最好在值得信任的论坛获取ROM刷机包。此外,很多水货手机的ROM中都被内置了恶意代码,稍不注意就会被激活,大家需谨慎购买水货手机。
安全接入WIFI
安卓手机使用wifi上网能享受快速的网络体验,但是用户手机不要轻易接入陌生WIFI,以防局域网泄露手机信息。在公告场所存在很多共享wifi,最好不要接入,以免手机中的个人隐私等信息被恶意窃取。
处理垃圾短信
垃圾短信盛行的年代,我们该有所行动了,一方面保护自己以免陷入财产危机,另一方面给自己一份清静。大部分防护软件都具有垃圾短信拦截功能,如360手机卫士、腾讯手机管家等,你可以开启垃圾短信拦截功能。此外,一些通讯录软件也集成了垃圾短信拦截功能。
安全传输文件
在电脑端下载的音乐、视频、文档等文件最好通过杀毒软件扫描查杀是否存在病毒,然后再传输到手机中,对于从可信网站下载的资料可以免去查杀过程。
1)从指定的URL获取对应的流
既然要获取网络资源,那么首先得有个URL,那么这里我首先封装一个打开URL连接获取到的InputStream 流,这样一来无论是图片资源还是文本文件资源都可以使用该接口方法来获取流。 该功能主要应用URLConnection和HttpURLConnection来实现,具体实现方案如下: 复制代码private InputStream openHttpConnection(String urlString) throws IOException{ InputStream in = null; int response = -1; URL url = new URL(urlString); URLConnection conn = url.openConnection(); if(!(conn instanceof HttpURLConnection)){ throw new IOException("It is not an HTTP connection"); } try { HttpURLConnection httpConn = (HttpURLConnection) conn; httpConn.setAllowUserInteraction(false); httpConn.setInstanceFollowRedirects(true); httpConn.setRequestMethod("GET"); httpConn.connect(); response = httpConn.getResponseCode(); if (response == HttpURLConnection.HTTP_OK) { in = httpConn.getInputStream(); } } catch (Exception ex) { Log.v("Networking",ex.getLocalizedMessage()); throw new IOException("Error connecting"); } return in; }复制代码(2)封装了上面的获取流方法接口后,我们就可以利用上面封装的方法来获取并下载相应图片和文本文件内容了 获取并下载图片资源方法: 复制代码private Bitmap downloadImage(String url){ Bitmap bitmap = null; InputStream in = null; try { in = openHttpConnection(url); bitmap = BitmapFactory.decodeStream(in); in.close(); } catch (IOException e) { // TODO Auto-generated catch block Log.v("NetworkingActivity", e.getLocalizedMessage()); } return bitmap; }复制代码 获取并下载文本内容方法: 复制代码private String downloadText(String url){ int BUFFER_SIZE = 2000; InputStream is = null; try { is = openHttpConnection(url); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return ""; } InputStreamReader isr = new InputStreamReader(is); int charRead; String str=""; char[] inputBuffer = new char[BUFFER_SIZE]; try { while((charRead=isr.read(inputBuffer))0){ String readString = String.copyValueOf(inputBuffer, 0, charRead); str += readString; inputBuffer = new char[BUFFER_SIZE]; } is.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); return ""; } return str; }复制代码(3)在获取下载图片资源和文本内容资源方法都完成后,现在就可以开始下载任务了,为了防止等待效应,一般采用异步任务来下载网络资源。 对对应的下载资源任务封装各自的异步下载任务即可。下面就是实现异步下载任务的方案: 异步下载图片任务: 复制代码private class DownloadImageTask extends AsyncTaskString, Bitmap, Long{ long imagesCount = 0; ProgressBar progressBar; public DownloadImageTask(ProgressBar pBar){ this.progressBar = pBar; } @Override protected Long doInBackground(String... urls) { // TODO Auto-generated method stub for(int i = 0; i urls.length;i++){ Bitmap imageDownloaded = downloadImage(urls[i]); if(imageDownloaded!=null){ imagesCount ++; publishProgress(imageDownloaded); try { Thread.sleep(300); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } return imagesCount; } //display the image downloaded @Override protected void onProgressUpdate(Bitmap... bitmaps) { // TODO Auto-generated method stub ivImg.setImageBitmap(bitmaps[0]); progressBar.setProgress((int) imagesCount*10); } //when all the images have been downloaded @Override protected void onPostExecute(Long imageDownloaded) { // TODO Auto-generated method stub String str = "下载完成!一共下载了"+imagesCount +"张图片"; Toast.makeText(getBaseContext(), str, Toast.LENGTH_SHORT).show(); } }复制代码 异步下载文本文件内容任务: 复制代码private class DownloadTextTask extends AsyncTaskString, Void, String{ @Override protected void onPostExecute(String result) { &tulaoshinbsp; // TODO Auto-generated method stub Toast.makeText(getBaseContext(), result, Toast.LENGTH_LONG).show(); } @Override protected String doInBackground(String... urls) { // TODO Auto-generated method stub return downloadText(urls[0]); } }复制代码这样一来,异步下载网络资源就完成了。 下面为了读者方便测试,下面提供本文实例代码中的相关网络资源URL,以方便大家自己测试使用。其余非核心代码就不在贴出来,望读者见谅。 复制代码//图片下载URLsprivate String[] mUrl = { "http://images.cnitblog.com/i/322919/201405/181111308592436.png", "http://images.cnitblog.com/i/322919/201405/181111385003770.png", "http://images.cnitblog.com/i/322919/201405/181111493901865.png", "http://images.cnitblog.com/i/322919/201405/181111550463327.png", "http://images.cnitblog.com/i/322919/201405/181117587961455.png", "http://images.cnitblog.com/i/322919/201405/181118041251414.png", "http://images.cnitblog.com/i/322919/201405/181119313754936.png", "http://images.cnitblog.com/i/322919/201405/181119357816682.png", "http://images.cnitblog.com/i/322919/201405/181119458753432.png", "http://images.cnitblog.com/i/322919/201405/181119499372608.png", "http://images.cnitblog.com/i/322919/201405/181120173901329.png", "http://images.cnitblog.com/i/322919/201405/181120244849561.png", "http://images.cnitblog.com/i/322919/201405/181120357812013.png", "http://images.cnitblog.com/i/322919/201405/181120398596959.png" };progressBar = (ProgressBar) findViewById(R.id.progressBar);progressBar.setMax(mUrl.length*10);progressBar.setVisibility(View.VISIBLE);//异步下载图片任务DownloadImageTask task = new DownloadImageTask(progressBar);task.execute(mUrl);//文本文件URLString strUrl = "http://www.sogou.com/docs/about.htm"; //异步下载文本文件内容任务new DownloadTextTask().execute(strUrl);周一外媒PhoneArena就一个有趣的话题发起了投票,Android、iOS和Windows Phone三大平台的最新升级,哪个重大?简而言之,Android L、iOS8和Windows Phone 8.1哪个对其生态系统的意义最为重大。
本次投票图老师共用近乎7000名用户参加。高达54%的用户认为WP8.1是三个升级中最为重要的,这对微软而言显然是个不错的消息,看上去WP8.1有望从竞争对手手中夺取更大的份额;36%的投票者认为Android L最为重大,毕竟Android L不仅带来了更多功能,还采用了全新的设计;仅有10%的用户认为苹果iOS8最为重大,不过考虑到苹果在iOS8中迈出了开放的第一步,这多少还是有些出人意外。
目前仅有WP8.1开始正式推送,iOS8和Android L则要等到今年秋季才会正式推出。
这个也是昨天学习的,做下总结。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/android/)检查服务是否开启要写成一个工具类,方便使用,传服务的名字返回Boolean值,当然,因为需要,还要传一个上下文context。
说一下这个工具类的几个关键点:
1.方法要传context和serviceName,context用来getSystemService()操作获得ActivityManager。注意,这个方法参数要用大写的Context中的参数:Context.ACTIVITY_SERVICE,要不然会出错,还不知道哪错的,花了我10分钟的时间才知道,谨记下。
2.ActivityManager实例可以getRunningService()方法,参数是获得服务最大数目,一般100就好。
3.上面的方法返回的事一个List,要对他进行遍历,获的每一个服务的名字,在比较,返回结果。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/android/)
下面是具体代码。
123456789101112131415161718192021 import java.util.List; import android.app.ActivityManager;import android.app.ActivityManager.RunningServiceInfo;import android.app.Service;import android.content.Context; public class ServiceStateUtiles { public static Boolean isServiceRunning(Context context, String serviceName) { //获取服务方法 参数 必须用大写的Context!!! ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); Listrunningserviceinfo infos = am.getRunningServices(100); for (RunningServiceInfo info : infos) { String className = info.service.getClassName(); if(serviceName.equals(className)) return true; } return false; }}/runningserviceinfo这部分是昨天学习的,但是因为眼睛超负荷所以拖到现在,以后要合理规划时间。
目前手机里面的号码归属地查询主要是通过两种方式:1.联网查询,2.匹配本机归属地数据库。
我认为两种结合方式最好,在本地数据库中匹配不到的在进行联网查询,能大大增加匹配效果,并且不用过于增加本地数据库容量而增大安装包大小。
步骤:1.开启软件的时候把数据库从assets目录拷贝到files目录下,如果已存在,则不用重新拷贝。
2.实现界面。
3.实现工具类PhoneAddressUtils的getPhoneAddress()方法
4.在界面类activity里调用工具类方法得到地址兵显示出来。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/android/)
首先是复制数据库的操作:
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/android/)? 1234567891011121314151617181920212223 private void copyDB() { File file = new File(getFilesDir(), "address.db"); if(file.exists()&&file.length()0) { Toast.makeText(this, "已经复制数据库", 0).show(); } else { try { AssetManager am = getAssets(); byte[] buffer = new byte[1024]; InputStream is = am.open("address.db"); FileOutputStream fis = new FileOutputStream(file); int len = 0; while((len=is.read(buffer))0) { fis.write(buffer, 0, len); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
因为运行中工具类得不到assets目录下的文件,所以要在在开机启动的SplashActivity中把数据库拷贝到files目录下。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/android/)
获得assert目录下的文件要用AssetManager对象的open()方法,打开文件返回输入流。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/android/)
实现界面:就一个简单的输入框,按钮,显示框就行。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/android/)
工具类:
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/android/)? 1234567891011121314151617181920212223242526 package com.itheima.mobilesafe.db.dao; import android.database.Cursor;import android.database.sqlite.SQLiteDatabase; public class AddressDao { private static String path = "data/data/com.itheima.mobTulaoshi.Comilesafe/files/address.db"; public static String getAddress(String number) { String address = number; if(number.matches("^1[34568]d{9}$")) { String sql = "select location from data2 where id = (select outkey from data1 where id= ?)"; SQLiteDatabase database = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY); Cursor cursor = database.rawQuery(sql, new String[] {number.substring(0, 7)}); while(cursor.moveToNext()) { address = cursor.getString(0); } cursor.close(); database.close(); } else { address = "不是手机号码"; } return address; }}
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/android/)
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/android/)
调用显示:
点击按钮时:
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/android/)? 12345 public void queryAddress(View view) { String number = et_phone.getText().toString(); String address = AddressDao.getAddress(number); et_address.setText(address); }
但是我们要动态的显示位置,所以要对输入框加一个TextChangedListener,当输入字符串大于3的时候,自动调用进行匹配显示出来。
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/android/)
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/android/)? 123456789101112131415161718192021222324 et_phone.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub if(s.length()3) { String address = AddressDao.getAddress(s.toString());  m.tulaoshi.com;et_address.setText(address); } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } });