3-AII–BroadcastReceiver實現鎖、開屏、簡訊監聽

張風捷特烈發表於2018-08-24

零、前言

1.按電源鍵,螢幕鎖屏,再按電源鍵螢幕開啟。在Activity開啟時註冊廣播用來監聽螢幕的關閉,Activity關閉時移除廣播。
2.這裡只能在該Activity中監聽,退出後BroadcastReceiver被登出,後面將會結合Service增強應用範圍
3.後面也會結合感測器進行搖晃開屏,暗環境鎖屏功能
4.簡訊監聽,可以當收到簡訊時處理,比如提醒、備份、上傳網路、刪除、自動回覆等

BroadcastReceiver實現鎖屏及開屏監聽.gif

一、程式碼實現

1:InnerActivity.java
public class InnerActivity extends AppCompatActivity {
    private ScreenReceiver mScreenReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_gary);
        ButterKnife.bind(this);
        regist();
    }

    /**
     * 動態的去註冊螢幕解鎖和鎖屏的廣播
     */
    private void regist() {
        // [1]動態的去註冊螢幕解鎖和鎖屏的廣播
        mScreenReceiver = new ScreenReceiver();
        // [2]建立intent-filter物件
        IntentFilter filter = new IntentFilter();
        // [3]新增要註冊的action
        filter.addAction("android.intent.action.SCREEN_OFF");
        filter.addAction("android.intent.action.SCREEN_ON");
        // [4]註冊廣播接收者
        registerReceiver(mScreenReceiver, filter);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //當activity銷燬的時候  取消註冊廣播接收者
        unregisterReceiver(mScreenReceiver);
    }
}
2:廣播接收者:ScreenReceiver.java
public class ScreenReceiver extends BroadcastReceiver {

    private static final String TAG = "ScreenReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
        //[1]獲取到當前廣播的事件型別
        String action = intent.getAction();
        //[2]對當前廣播事件型別做一個判斷
        if ("android.intent.action.SCREEN_OFF".equals(action)) {
            Log.i(TAG, "螢幕鎖屏了");
        } else if ("android.intent.action.SCREEN_ON".equals(action)) {
            Log.i(TAG, "螢幕解鎖了");
        }
    }
}

二、簡訊監聽

1、InnerActivity#regist
//註冊簡訊廣播接收者
IntentFilter smsFilter = new IntentFilter();
smsFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
mSmsReceiver = new SmsReceiver();
registerReceiver(mSmsReceiver, smsFilter);
2、InnerActivity#onDestroy
unregisterReceiver(mSmsReceiver);//登出簡訊廣播接收者
3、簡訊廣播接收者:SmsReceiver.java
public class SmsReceiver extends BroadcastReceiver {

    //當簡訊到來的時候 就會執行這個方法
    @Override
    public void onReceive(Context context, Intent intent) {
        //[1]獲取發簡訊送的號碼  和內容
        Object[] objects = (Object[]) intent.getExtras().get("pdus");
        for (Object pdu : objects) {
            //[2]獲取smsmessage例項
            SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu);
            //[3]獲取傳送簡訊的內容
            String body = smsMessage.getMessageBody();
            Date date = new Date(smsMessage.getTimestampMillis());//時間
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            //[4]獲取傳送者
            String address = smsMessage.getOriginatingAddress();
            String receiveTime = format.format(date);
            Log.e("SmsReceiver", "body:" + body + "---" + address+"---"+receiveTime);
        }
    }
}
4、新增許可權
    <!--新增許可權-->
    <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
    <uses-permission android:name="android.permission.READ_SMS"></uses-permission>
5、安卓5.1,實驗結果如下:(6.0以上注意動態許可權)
E/SmsReceiver: body:hello---+8613167727310---2018-08-24 21:50:13

後記、

1.宣告:

[1]本文由張風捷特烈原創,轉載請註明
[2]歡迎廣大程式設計愛好者共同交流
[3]個人能力有限,如有不正之處歡迎大家批評指證,必定虛心改正

[4]你的喜歡與支援將是我最大的動力

2.連線傳送門:

更多安卓技術歡迎訪問:安卓技術棧
我的github地址:歡迎star
簡書首發,騰訊雲+社群同步更新
張風捷特烈個人網站,程式設計筆記請訪問:http://www.toly1994.com

3.聯絡我

QQ:1981462002
郵箱:1981462002@qq.com
微信:zdl1994328

4.歡迎關注我的微信公眾號,最新精彩文章,及時送達:
公眾號.jpg


相關文章