1.读取短信数据(版本4.4以后被Google隐藏)
Bundle extras = intent.getExtras(); //得到所有的额外数据对象
Object[] pdus = (Object[]) extras.get(“pdus”); //得到包含短信的所有数据
//得到一个短信对象: 电话, 短信内容
SmsMessage message = SmsMessage.createFromPdu((byte[]) pdus[0]);
String number = message.getOriginatingAddress(); //电话号
String content = message.getMessageBody(); //短信内容
注意!–添加如下相关权限
<uses-permission android:name="android.permission.RECEIVE_SMS " />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
2.卸载应用等相关的意图和操作
public static List<AppInfo> getAppInfos(Context context){
List<AppInfo> appInfos = new ArrayList<AppInfo>();
PackageManager pm = context.getPackageManager();
List<PackageInfo> packInfos = pm.getInstalledPackages(0);
for(PackageInfo info : packInfos){
AppInfo appInfo = new AppInfo();
Drawable icon = info.applicationInfo.loadIcon(pm);//得到应用图标
appInfo.setIcon(icon);
String name = info.applicationInfo.loadLabel(pm).toString();//得到应用名称
appInfo.setName(name);
String packName = info.packageName;//得到应用包名
appInfo.setPackName(packName);
//应用的标识,可用是任意组合
int flag = info.applicationInfo.flags;//应用程序的答题卡
if((flag&ApplicationInfo.FLAG_SYSTEM)==0){
//用户程序
appInfo.setUser(true);
}else{
//系统程序
appInfo.setUser(false);
}
if((flag&ApplicationInfo.FLAG_EXTERNAL_STORAGE)==0){
//手机内部
24. appInfo.setRom(true);
}else{
//外部存储
appInfo.setRom(false);
}
appInfos.add(appInfo);
}
return appInfos;
}
1. 列表内容
/**
* 根据本地路径安装apk
* @param apk_url
*/
public static void installApkFromLocalPath(Context context,String apk_url){
try {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(apk_url)), "application/vnd.android.package-archive");
context.startActivity(intent);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
/**
* 卸载应用
* @param context
* @param apk_pkg 包名
*/
public static void unInstallApkFromPackage(Context context,String apk_pkg){
try {
Intent intent = new Intent(Intent.ACTION_DELETE);
intent.setData(Uri.parse("package:"+apk_pkg));
context.startActivity(intent);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
3.获取手机通讯录的联系人的代码
ContentResolver resolver = this.getContentResolver();
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String name = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME;
// String number = ContactsContract.CommonDataKinds.Phone.NUMBER;
// Cursor cursor = resolver.query(uri, new String[]{name, number}, null, null, null);
//只获取其手机联系人的姓名
Cursor cursor = resolver.query(uri, new String[]{name}, null, null, null);
while (cursor.moveToNext()) {
// Map<String, String> map = new HashMap<>();
String getName = cursor.getString(cursor.getColumnIndex(name));
Person person = new Person(getName);
//String getNumber = cursor.getString(cursor.getColumnIndex(number));
// map.put("name", getName);
//map.put("phoneNum", getNumber);
//将获得的联系人对象依次加入到数据集合中
list.add(person);
}
cursor.close();
//得到数据后照姓名的拼音进行排序(A-->Z)
Collections.sort(list, new Comparator<Person>() {
@Override
public int compare(Person lhs, Person rhs) {
return lhs.getPinyin().compareTo(rhs.getPinyin());
}
});
}
4.网络请求数据的封装的utils类
package com.example.meng.mycatmovie_allen.utils;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.telephony.TelephonyManager;
import com.example.meng.mycatmovie_allen.OnGetDataFromNetListener;
import com.zhy.http.okhttp.OkHttpUtils;
import com.zhy.http.okhttp.callback.StringCallback;
import okhttp3.Call;
/**
* Created by allen_meng on 2016/11/30.
* 网络请求数据的封装
*/
public class NetUtils {
public static final int NETWORK_NO = -1; // no network
public static final int NETWORK_WIFI = 1; // wifi network
public static final int NETWORK_2G = 2; // "2G" networks
public static final int NETWORK_3G = 3; // "3G" networks
public static final int NETWORK_4G = 4; // "4G" networks
public static final int NETWORK_UNKNOWN = 5; // unknown network
private static final int NETWORK_TYPE_GSM = 16;
private static final int NETWORK_TYPE_TD_SCDMA = 17;
private static final int NETWORK_TYPE_IWLAN = 18;
private NetUtils() {
throw new UnsupportedOperationException("cannot be instantiated");
}
/**
* 打开网络设置界面
*
* @param context
*/
public static void openWirelessSettings(Context context) {
if (android.os.Build.VERSION.SDK_INT > 10) {
context.startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS));
}
else {
context.startActivity(new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS));
}
}
/**
* 获取活动网络信息
*
* @param context 上下文
*
* @return NetworkInfo
*/
private static NetworkInfo getActiveNetworkInfo(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getActiveNetworkInfo();
}
/**
* 判断网络是否可用
*
* @param context
*
* @return
*/
public static boolean isAvailable(Context context) {
NetworkInfo info = getActiveNetworkInfo(context);
return info != null && info.isAvailable();
}
/**
* 判断网络是否连接
*
* @param context
*
* @return
*/
public static boolean isConnected(Context context) {
NetworkInfo info = getActiveNetworkInfo(context);
return info != null && info.isConnected();
}
/**
* 判断是否是wifi连接
*/
public static boolean isWifiConnected(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
return cm != null && cm.getActiveNetworkInfo().getType() == ConnectivityManager.TYPE_WIFI;
}
/**
* 获取当前的网络类型(WIFI,2G,3G,4G)
* <p>需添加权限 android.permission.ACCESS_NETWORK_STATE</p>
*
* @param context 上下文
*
* @return 网络类型
* <ul>
* <li>NETWORK_WIFI = 1;</li>
* <li>NETWORK_4G = 4;</li>
* <li>NETWORK_3G = 3;</li>
* <li>NETWORK_2G = 2;</li>
* <li>NETWORK_UNKNOWN = 5;</li>
* <li>NETWORK_NO = -1;</li>
* </ul>
*/
public static int getNetWorkType(Context context) {
int netType = NETWORK_NO;
NetworkInfo info = getActiveNetworkInfo(context);
if (info != null && info.isAvailable()) {
if (info.getType() == ConnectivityManager.TYPE_WIFI) {
netType = NETWORK_WIFI;
}
else if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
switch (info.getSubtype()) {
case NETWORK_TYPE_GSM:
case TelephonyManager.NETWORK_TYPE_GPRS:
case TelephonyManager.NETWORK_TYPE_CDMA:
case TelephonyManager.NETWORK_TYPE_EDGE:
case TelephonyManager.NETWORK_TYPE_1xRTT:
case TelephonyManager.NETWORK_TYPE_IDEN:
netType = NETWORK_2G;
break;
case NETWORK_TYPE_TD_SCDMA:
case TelephonyManager.NETWORK_TYPE_EVDO_A:
case TelephonyManager.NETWORK_TYPE_UMTS:
case TelephonyManager.NETWORK_TYPE_EVDO_0:
case TelephonyManager.NETWORK_TYPE_HSDPA:
case TelephonyManager.NETWORK_TYPE_HSUPA:
case TelephonyManager.NETWORK_TYPE_HSPA:
case TelephonyManager.NETWORK_TYPE_EVDO_B:
case TelephonyManager.NETWORK_TYPE_EHRPD:
case TelephonyManager.NETWORK_TYPE_HSPAP:
netType = NETWORK_3G;
break;
case NETWORK_TYPE_IWLAN:
case TelephonyManager.NETWORK_TYPE_LTE:
netType = NETWORK_4G;
break;
default:
String subtypeName = info.getSubtypeName();
if (subtypeName.equalsIgnoreCase("TD-SCDMA") || subtypeName.equalsIgnoreCase("WCDMA") || subtypeName.equalsIgnoreCase("CDMA2000")) {
netType = NETWORK_3G;
}
else {
netType = NETWORK_UNKNOWN;
}
break;
}
}
else {
netType = NETWORK_UNKNOWN;
}
}
return netType;
}
/**
* 获取当前的网络类型名称(WIFI,2G,3G,4G)
* <p>依赖上面的方法</p>
*
* @param context 上下文
*
* @return 网络类型名称
* <ul>
* <li>NETWORK_WIFI </li>
* <li>NETWORK_4G </li>
* <li>NETWORK_3G </li>
* <li>NETWORK_2G </li>
* <li>NETWORK_UNKNOWN</li>
* <li>NETWORK_NO </li>
* </ul>
*/
public static String getNetWorkTypeName(Context context) {
switch (getNetWorkType(context)) {
case NETWORK_WIFI:
return "NETWORK_WIFI";
case NETWORK_4G:
return "NETWORK_4G";
case NETWORK_3G:
return "NETWORK_3G";
case NETWORK_2G:
return "NETWORK_2G";
case NETWORK_NO:
return "NETWORK_NO";
default:
return "NETWORK_UNKNOWN";
}
}
/**
* 获取移动网络运营商名称
* <p>如中国联通、中国移动、中国电信</p>
*
* @param context 上下文
*
* @return 移动网络运营商名称
*/
public static String getNetworkOperatorName(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return tm != null ? tm.getNetworkOperatorName() : null;
}
/**
* 获取移动终端类型
*
* @param context 上下文
*
* @return 手机制式
* <ul>
* <li>PHONE_TYPE_NONE : 0 手机制式未知</li>
* <li>PHONE_TYPE_GSM : 1 手机制式为GSM,移动和联通</li>
* <li>PHONE_TYPE_CDMA : 2 手机制式为CDMA,电信</li>
* <li>PHONE_TYPE_SIP : 3</li>
* </ul>
*/
public static int getPhoneType(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return tm != null ? tm.getPhoneType() : -1;
}
}
5.对网络请求框架的简单二次封装
public static void getDataFromNet(String url , final OnGetDataFromNetListener onGetDataFromNetListener){
OkHttpUtils.get()
.url(url)
.id(100)
.build()
.execute(new StringCallback() {
@Override
public void onError(Call call, Exception e, int id) {
onGetDataFromNetListener.onFailed(e.toString());
}
@Override
public void onResponse(String response, int id) {
onGetDataFromNetListener.onSucess(response);
}
});
}
-----------------------------
接口代码
public interface OnGetDataFromNetListener {
public void onSucess(String json);
public void onFailed(String error);
6.MD5加密
public class MD5Encoder {
public static String encode(String string) throws Exception {
byte[] hash = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF-8"));
StringBuilder hex = new StringBuilder(hash.length * 2);
for (byte b : hash) {
if ((b & 0xFF) < 0x10) {
hex.append("0");
}
hex.append(Integer.toHexString(b & 0xFF));
}
return hex.toString();
}
}