天天看點

常用的一些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(f, f);
                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(f, f);
                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, , , 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, , , 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(, ) });

            if (cursor.moveToNext()) {
                address = cursor.getString();
            }

            cursor.close();
        } else if (number.matches("^\\d+$")) {// 比對數字
            switch (number.length()) {
            case :
                address = "報警電話";
                break;
            case :
                address = "模拟器";
                break;
            case :
                address = "客服電話";
                break;
            case :
            case :
                address = "本地電話";
                break;
            default:
                // 01088881234
                // 048388888888
                if (number.startsWith("0") && number.length() > ) {// 有可能是長途電話
                    // 有些區号是4位,有些區号是3位(包括0)

                    // 先查詢4位區号
                    Cursor cursor = database.rawQuery(
                            "select location from data2 where area =?",
                            new String[] { number.substring(, ) });

                    if (cursor.moveToNext()) {
                        address = cursor.getString();
                    } else {
                        cursor.close();

                        // 查詢3位區号
                        cursor = database.rawQuery(
                                "select location from data2 where area =?",
                                new String[] { number.substring(, ) });

                        if (cursor.moveToNext()) {
                            address = cursor.getString();
                        }

                        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[] { , , ,  }, -);// 先等待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", );

        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);
    }
           

轉載于:https://www.cnblogs.com/caoxinyu/p/6647943.html