常用的一些api
发送手机短信
// 发送短信给安全号码
SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(phone, null,"sim card changed!", null, null);
设置接受广播的优先级最高也就是inter里面的最大值。你可以看api,然后转化为十进制。应该是这个 2147483647。
<receiver android:name=".receiver.SmsReceiver" >
            <intent-filter android:priority="2147483647" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>
播放一些小聲音
// 播放报警音乐, 即使手机调为静音,也能播放音乐, 因为使用的是媒体声音的通道,和铃声无关
                MediaPlayer player = MediaPlayer.create(context, R.raw.ylzs);
                player.setVolume(1f, 1f);
                player.setLooping(true);
                player.start();
短信的广播接受者
package com.itheima52.mobilesafe.receiver;
import com.itheima52.mobilesafe.R;
import com.itheima52.mobilesafe.service.LocationService;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.media.MediaPlayer;
import android.sax.StartElementListener;
import android.telephony.SmsMessage;
/**
 * 拦截短信
 *
 * @author Kevin
 *
 */
public class SmsReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Object[] objects = (Object[]) intent.getExtras().get("pdus");
        for (Object object : objects) {// 短信最多140字节,
                                        // 超出的话,会分为多条短信发送,所以是一个数组,因为我们的短信指令很短,所以for循环只执行一次
            SmsMessage message = SmsMessage.createFromPdu((byte[]) object);
            String originatingAddress = message.getOriginatingAddress();// 短信来源号码
            String messageBody = message.getMessageBody();// 短信内容
            System.out.println(originatingAddress + ":" + messageBody);
            if ("#*alarm*#".equals(messageBody)) {
                // 播放报警音乐, 即使手机调为静音,也能播放音乐, 因为使用的是媒体声音的通道,和铃声无关
                MediaPlayer player = MediaPlayer.create(context, R.raw.ylzs);
                player.setVolume(1f, 1f);
                player.setLooping(true);
                player.start();
                abortBroadcast();// 中断短信的传递, 从而系统短信app就收不到内容了
            } else if ("#*location*#".equals(messageBody)) {
                // 获取经纬度坐标
                context.startService(new Intent(context, LocationService.class));// 开启定位服务
                SharedPreferences sp = context.getSharedPreferences("config",
                        Context.MODE_PRIVATE);
                String location = sp.getString("location",
                        "getting location...");
                System.out.println("location:" + location);
                abortBroadcast();// 中断短信的传递, 从而系统短信app就收不到内容了
            } else if ("#*wipedata*#".equals(messageBody)) {
                System.out.println("远程清除数据");
                abortBroadcast();
            } else if ("#*lockscreen*#".equals(messageBody)) {
                System.out.println("远程锁屏");
                abortBroadcast();
            }
        }
    }
}
手机定位
package com.itheima52.location;
import java.util.List;
import android.app.Activity;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends Activity {
    private TextView tvLocation;
    private LocationManager lm;
    private MyLocationListener listener;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tvLocation = (TextView) findViewById(R.id.tv_location);
        lm = (LocationManager) getSystemService(LOCATION_SERVICE);
        List<String> allProviders = lm.getAllProviders();// 获取所有位置提供者
        System.out.println(allProviders);
        listener = new MyLocationListener();
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, listener);// 参1表示位置提供者,参2表示最短更新时间,参3表示最短更新距离
    }
    class MyLocationListener implements LocationListener {
        // 位置发生变化
        @Override
        public void onLocationChanged(Location location) {
            String j = "经度:" + location.getLongitude();
            String w = "纬度:" + location.getLatitude();
            String accuracy = "精确度:" + location.getAccuracy();
            String altitude = "海拔:" + location.getAltitude();
            tvLocation
                    .setText(j + "\n" + w + "\n" + accuracy + "\n" + altitude);
        }
        // 位置提供者状态发生变化
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            System.out.println("onStatusChanged");
        }
        // 用户打开gps
        @Override
        public void onProviderEnabled(String provider) {
            System.out.println("onProviderEnabled");
        }
        // 用户关闭gps
        @Override
        public void onProviderDisabled(String provider) {
            System.out.println("onProviderDisabled");
        }
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        lm.removeUpdates(listener);// 当activity销毁时,停止更新位置, 节省电量
    }
}
选择最优定位定位
package com.itheima52.mobilesafe.service;
import android.app.Service;
import android.content.Intent;
import android.content.SharedPreferences;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
/**
 * 获取经纬度坐标的service
 *
 * @author Kevin
 *
 */
public class LocationService extends Service {
    private LocationManager lm;
    private MyLocationListener listener;
    private SharedPreferences mPref;
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    @Override
    public void onCreate() {
        super.onCreate();
        mPref = getSharedPreferences("config", MODE_PRIVATE);
        lm = (LocationManager) getSystemService(LOCATION_SERVICE);
        // List<String> allProviders = lm.getAllProviders();// 获取所有位置提供者
        // System.out.println(allProviders);
        Criteria criteria = new Criteria();
        criteria.setCostAllowed(true);// 是否允许付费,比如使用3g网络定位
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        String bestProvider = lm.getBestProvider(criteria, true);// 获取最佳位置提供者
        listener = new MyLocationListener();
        lm.requestLocationUpdates(bestProvider, 0, 0, listener);// 参1表示位置提供者,参2表示最短更新时间,参3表示最短更新距离
    }
    class MyLocationListener implements LocationListener {
        // 位置发生变化
        @Override
        public void onLocationChanged(Location location) {
            System.out.println("get location!");
            // 将获取的经纬度保存在sp中
            mPref.edit()
                    .putString(
                            "location",
                            "j:" + location.getLongitude() + "; w:"
                                    + location.getLatitude()).commit();
            stopSelf();//停掉service
        }
        // 位置提供者状态发生变化
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
            System.out.println("onStatusChanged");
        }
        // 用户打开gps
        @Override
        public void onProviderEnabled(String provider) {
            System.out.println("onProviderEnabled");
        }
        // 用户关闭gps
        @Override
        public void onProviderDisabled(String provider) {
            System.out.println("onProviderDisabled");
        }
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        lm.removeUpdates(listener);// 当activity销毁时,停止更新位置, 节省电量
    }
}
监听输入框文字变化
// 监听EditText的变化
        etNumber.addTextChangedListener(new TextWatcher() {
            // 文字 发生变化时的回调
            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                String address = AddressDao.getAddress(s.toString());
                tvResult.setText(address);
            }
            // 文字变化前的回调
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
            }
            // 文字变化结束之后的回调
            @Override
            public void afterTextChanged(Editable s) {
            }
        });
访问已经有的数据库
package com.itheima52.mobilesafe.db.dao;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
/**
 * 归属地查询工具
 *
 * @author Kevin
 *
 */
public class AddressDao {
    private static final String PATH = "data/data/com.itheima52.mobilesafe/files/address.db";// 注意,该路径必须是data/data目录的文件,否则数据库访问不到
    public static String getAddress(String number) {
        String address = "未知号码";
        // 获取数据库对象
        SQLiteDatabase database = SQLiteDatabase.openDatabase(PATH, null,
                SQLiteDatabase.OPEN_READONLY);
        // 手机号码特点: 1 + (3,4,5,6,7,8) + (9位数字)
        // 正则表达式
        // ^1[3-8]\d{9}$
        if (number.matches("^1[3-8]\\d{9}$")) {// 匹配手机号码
            Cursor cursor = database
                    .rawQuery(
                            "select location from data2 where id=(select outkey from data1 where id=?)",
                            new String[] { number.substring(0, 7) });
            if (cursor.moveToNext()) {
                address = cursor.getString(0);
            }
            cursor.close();
        } else if (number.matches("^\\d+$")) {// 匹配数字
            switch (number.length()) {
            case 3:
                address = "报警电话";
                break;
            case 4:
                address = "模拟器";
                break;
            case 5:
                address = "客服电话";
                break;
            case 7:
            case 8:
                address = "本地电话";
                break;
            default:
                // 01088881234
                // 048388888888
                if (number.startsWith("0") && number.length() > 10) {// 有可能是长途电话
                    // 有些区号是4位,有些区号是3位(包括0)
                    // 先查询4位区号
                    Cursor cursor = database.rawQuery(
                            "select location from data2 where area =?",
                            new String[] { number.substring(1, 4) });
                    if (cursor.moveToNext()) {
                        address = cursor.getString(0);
                    } else {
                        cursor.close();
                        // 查询3位区号
                        cursor = database.rawQuery(
                                "select location from data2 where area =?",
                                new String[] { number.substring(1, 3) });
                        if (cursor.moveToNext()) {
                            address = cursor.getString(0);
                        }
                        cursor.close();
                    }
                }
                break;
            }
        }
        database.close();// 关闭数据库
        return address;
    }
}
振动器
/**
     * 手机震动, 需要权限 android.permission.VIBRATE
     */
    private void vibrate() {
        Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
        // vibrator.vibrate(2000);震动两秒
        vibrator.vibrate(new long[] { 1000, 2000, 1000, 3000 }, -1);// 先等待1秒,再震动2秒,再等待1秒,再震动3秒,
                                                                    // 参2等于-1表示只执行一次,不循环,
                                                                    // 参2等于0表示从头循环,
                                                                    // 参2表示从第几个位置开始循环
        // 取消震动vibrator.cancel()
    }
接受来电做一些事情
package com.itheima52.mobilesafe.service;
import com.itheima52.mobilesafe.R;
import com.itheima52.mobilesafe.db.dao.AddressDao;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.PixelFormat;
import android.os.IBinder;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.view.View;
import android.view.WindowManager;
import android.widget.TextView;
import android.widget.Toast;
/**
 * 来电提醒的服务
 *
 * @author Kevin
 *
 */
public class AddressService extends Service {
    private TelephonyManager tm;
    private MyListener listener;
    private OutCallReceiver receiver;
    private WindowManager mWM;
    private View view;
    private SharedPreferences mPref;
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    @Override
    public void onCreate() {
        super.onCreate();
        mPref = getSharedPreferences("config", MODE_PRIVATE);
        tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
        listener = new MyListener();
        tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);// 监听来电的状态
        receiver = new OutCallReceiver();
        IntentFilter filter = new IntentFilter(Intent.ACTION_NEW_OUTGOING_CALL);
        registerReceiver(receiver, filter);// 动态注册广播
    }
    class MyListener extends PhoneStateListener {
        @Override
        public void onCallStateChanged(int state, String incomingNumber) {
            switch (state) {
            case TelephonyManager.CALL_STATE_RINGING:// 电话铃声响了
                System.out.println("电话铃响...");
                String address = AddressDao.getAddress(incomingNumber);// 根据来电号码查询归属地
                // Toast.makeText(AddressService.this, address,
                // Toast.LENGTH_LONG)
                // .show();
                showToast(address);
                break;
            case TelephonyManager.CALL_STATE_IDLE:// 电话闲置状态
                if (mWM != null && view != null) {
                    mWM.removeView(view);// 从window中移除view
                    view = null;
                }
                break;
            default:
                break;
            }
            super.onCallStateChanged(state, incomingNumber);
        }
    }
    /**
     * 监听去电的广播接受者 需要权限: android.permission.PROCESS_OUTGOING_CALLS
     *
     * @author Kevin
     *
     */
    class OutCallReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            String number = getResultData();// 获取去电电话号码
            String address = AddressDao.getAddress(number);
            // Toast.makeText(context, address, Toast.LENGTH_LONG).show();
            showToast(address);
        }
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
        tm.listen(listener, PhoneStateListener.LISTEN_NONE);// 停止来电监听
        unregisterReceiver(receiver);// 注销广播
    }
    /**
     * 自定义归属地浮窗
     */
    private void showToast(String text) {
        mWM = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
        WindowManager.LayoutParams params = new WindowManager.LayoutParams();
        params.height = WindowManager.LayoutParams.WRAP_CONTENT;
        params.width = WindowManager.LayoutParams.WRAP_CONTENT;
        params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
                | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
        params.format = PixelFormat.TRANSLUCENT;
        params.type = WindowManager.LayoutParams.TYPE_TOAST;
        params.setTitle("Toast");
        // view = new TextView(this);
        view = View.inflate(this, R.layout.toast_address, null);
        int[] bgs = new int[] { R.drawable.call_locate_white,
                R.drawable.call_locate_orange, R.drawable.call_locate_blue,
                R.drawable.call_locate_gray, R.drawable.call_locate_green };
        int style = mPref.getInt("address_style", 0);
        view.setBackgroundResource(bgs[style]);// 根据存储的样式更新背景
        TextView tvText = (TextView) view.findViewById(R.id.tv_number);
        tvText.setText(text);
        mWM.addView(view, params);// 将view添加在屏幕上(Window)
    }
}
//获取到rom内存的运行的剩余空间
        long rom_freeSpace = Environment.getDataDirectory().getFreeSpace();
        //获取到SD卡的剩余空间
        long sd_freeSpace = Environment.getExternalStorageDirectory().getFreeSpace();
        System.out.println("内存可用:" + rom_freeSpace);
        System.out.println("sd卡可用:" + sd_freeSpace);
        //格式化大小
        tv_rom.setText("内存可用:" + Formatter.formatFileSize(this, rom_freeSpace));
        tv_sd.setText("sd卡可用" + Formatter.formatFileSize(this, sd_freeSpace));
文本复制到剪切板
@SuppressWarnings("deprecation")
    public static void copyTextToBoard(String string) {
        if (TextUtils.isEmpty(string))
            return;
        ClipboardManager clip = (ClipboardManager) BaseApplication.context()
                .getSystemService(Context.CLIPBOARD_SERVICE);
        clip.setText(string);
        AppContext.showToast(R.string.copy_success);
    }
常用的一些api的更多相关文章
- Func常用模块及API
		
Func常用模块及API Func提供了非常丰富的功能模块,包括: CommandModule(执行命令) CopyFileModule(拷贝文件) CpuModule(CPU信息) DiskModu ...
 - 常用的百度API地图操作
		
常用的百度API地图操作,包括模糊搜索,放大缩小,并支持移动端 效果图如下 完整代码: http://download.csdn.net/detail/jine515073/8778167
 - 已看1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。[泛型]\
		
1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架.多线程(并发编程).I/O(NIO).Socket.JDBC.XML.反射等.[泛型]\1* ...
 - Vue3:不常用的Composition API  &&  Fragment、Teleport、Suspense  &&  与Vue2对比的一些变化
		
1 # 一.Vue3不常用的Composition API 2 # 1.shallowReactive与shallowRef 3 .shallowReactive: 只处理对象最外层属性的响应式(浅响 ...
 - Saltstack常用模块及API
		
Saltstack提供了非常丰富的功能模块,涉及操作系统的基础功能.常用工具支持等,更多模块信息可以查看官网模块介绍.也可以通过sys模块列出当前版本支持的模块. salt '*' sys.list_ ...
 - Func系列2:常用模块及API
		
简介 Func提供了非常丰富的功能模块,包括CommandModule(执行命令).CopyFileModule(拷贝文件).CPUModule(CPU信息).DiskModule(磁盘信息).Fil ...
 - Saltstack系列3:Saltstack常用模块及API
		
说明 salt '*' sys.list_modules #列出当前版本支持的模块 API原理是通过调用master client模块,实例化一个LocalClient对象,再调用cmd()方法来实现 ...
 - Ansible常用模块及API
		
Ansible安装 安装EPEL作为安装Ansible的yum源(CentOS6.4): rpm -Uvh http://ftp.linux.ncsu.edu/pub/epel/6/i386/epel ...
 - 常用Vxworks编程API
		
vxWorks编程API 一.官方的Program Guide 位于安装目录下:\docs\vxworks\guide\index.html 二.常用的库: #i nclude "taskL ...
 - Js 常用字符串操作 API
		
常用的一些字符串操作 API 整理 1.str.charAt(index).str.charCodeAt(index) - 返回指定位置的字符 / 字符编码(0~65535) index - 必须,表 ...
 
随机推荐
- 超链接显示网站 A,访问后进入网站 B
			
#前端黑魔法# 出一个思考题:如何用最少的字符实现下图效果.即超链接显示网站 A,访问后进入网站 B. 当然这个是上古时代的黑魔法了,稍懂前端的都知道原理.所以这里只问最短的实现~ 一个简单的演示:( ...
 - 【Java/Android性能优 4】PreloadDataCache支持预取的数据缓存,使用简单,支持多种缓存算法,支持不同网络类型,扩展性强
			
本文转自:http://www.trinea.cn/android/preloaddatacache/ 本文主要介绍一个支持自动向前或向后获取新数据的缓存的使用及功能.Android图片内存缓存可见I ...
 - 简单的RelativeLayout布局
			
简单的RelativeLayout布局实例 <?xml version="1.0" encoding="utf-8"?> <RelativeL ...
 - JS实现正则表达式
			
一.创建正则表达式 一共有两种方式: 1.直接量:var re = /[0-9]*/; 2.通过RegExp对象的构造函数:var re = RegExp("[0-9]*",&qu ...
 - Android商城开发系列(十四)——  设置监听RecyclerView的位置
			
在前面的博客中有讲到过点击一个图片按钮控制RecyclerView的滚动到顶部位置的效果,但是那个图片按钮一直处在一个显示的状态,今天我们来改造一下那个地方,我们要实现的效果是:一开始打开的时候看不到 ...
 - git剖析
			
GIT(分布式版本控制系统) Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. 1.特点 分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(g ...
 - lnmp一键安装 nginx
			
官网: https://lnmp.org/install.html 1.下载完整版:http://soft.vpser.net/lnmp/lnmp1.5-full.tar.gz文件大小:715MB M ...
 - Android(java)学习笔记77:Android中assets文件夹资源的访问
			
Android资源文件分类: Android资源文件大致可以分为两种: 第一种是res目录下存放的可编译的资源文件: 这种资源文件系统会在R.java里面自动生成该资源文件的ID,所以访问这种资源文件 ...
 - 【BZOJ4810】[YNOI2017] 由乃的玉米田(莫队+bitset)
			
点此看题面 大致题意: 给你一段序列,每次询问一段区间内是否存在两个数的差或和或积为\(x\). 莫队算法 看到区间询问+可以离线,首先想到了莫队啊. 但是,在较短的时间内更新信息依然比较难以实现. ...
 - python_76_json与pickle反序列化2
			
import pickle def say(name):#序列化时用完会释放,要想反序列化,要重新写上该函数,否则会出错 print('我的高中:', name)#可以和之前的序列化函数不同 f=op ...