當前位置:首頁 » 安卓系統 » android添加監聽

android添加監聽

發布時間: 2023-06-11 09:59:22

⑴ android開發怎麼監控來電並監聽

實現如下廣播,並且在AndroidManifest中進行注冊

public class PhoneReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
System.out.println("action"+intent.getAction());
//如果是去電
if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){
String phoneNumber = intent
.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
Log.d(TAG, "call OUT:" + phoneNumber);
}else{
//查了下android文檔,貌似沒有專門用於接收來電的action,所以,非去電即來電.
//如果我們想要監聽電話的撥打狀況,需要這么幾步 :
* 第一:獲取電話服務管理器TelephonyManager manager = this.getSystemService(TELEPHONY_SERVICE);
* 第二:通過TelephonyManager注冊我們要監聽的電話狀態改變事件。manager.listen(new MyPhoneStateListener(),
* PhoneStateListener.LISTEN_CALL_STATE);這里的PhoneStateListener.LISTEN_CALL_STATE就是我們想要
* 監聽的狀態改變事件,初次之外,還有很多其他事件哦。
* 第三步:通過extends PhoneStateListener來定製自己的規則。將其對象傳遞給第二步作為參數。
* 第四步:這一步很重要,那就是給應用添加許可權。android.permission.READ_PHONE_STATE

TelephonyManager tm = (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);
tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE);
//設置一個監聽器
}
}
PhoneStateListener listener=new PhoneStateListener(){

@Override
public void onCallStateChanged(int state, String incomingNumber) {
//注意,方法必須寫在super方法後面,否則incomingNumber無法獲取到值。
super.onCallStateChanged(state, incomingNumber);
switch(state){
case TelephonyManager.CALL_STATE_IDLE:
System.out.println("掛斷");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
System.out.println("接聽");
break;
case TelephonyManager.CALL_STATE_RINGING:
System.out.println("響鈴:來電號碼"+incomingNumber);
//輸出來電號碼
break;
}
}

⑵ Android 超簡單實現網路狀態的監聽

我們做項目的時候,不可避免的要做網路狀態的監聽,一般我們都是抽取出一個工具類來實現,比如:

細致的你當然還會再寫一個判斷網路類型的方法,反手再來一個例:

然後就可以在相應的操作前進行判斷網路的判斷:

但是這樣做也有些問題:

接下來就是本文的重點,如何通過 NetStatusBus 這個庫來解決以上問題,讓你的網路狀態監聽變得前所未有的簡單粗暴。

到這里就已經結束了,你的所有網路操作已經都可以清晰優雅的在訂閱方法中進行處理了,當然你也可以繼續往下看。

訂閱方法必須填寫一個NetType參數,可以通過NetType的值來判斷當前網路類型。

@NetSubscribe中 netType為可選值,可以設置訂閱的類型,可選值類型如下:

NetType.AUTO

這是默認值,任何網路狀態發生變化,該類型訂閱者都會被回調。同時會傳入NetType參數告知你當前的網路類型,示例如下:

只要當前是由 WIFI 改變引發的網路狀態變化,該類型訂閱者都會被回調。同時會傳入NetType參數告知你當前的網路類型,示例如下:

只要當前是由移動網路改變引發的網路狀態變化,該類型訂閱者都會被回調。同時會傳入NetType參數告知你當前的網路類型,示例如下:

NetType.NONE

只有當網路丟失時,該類型訂閱者才會被回調。

有人會覺得,我用個庫爽就行了管它的原理干什麼?

你放心,我只是小小的描述一下實現方式。

原理簡單來說,就是在全局初始化的時候就綁定對網路的變化監聽。然後將進行注冊的父類所有的訂閱方法保存至集合中,這里涉及到一些方法的校驗,最後在網路狀態發生改變時利用 java 反射機制遍歷執行所有訂閱方法。熟悉 EventBus 的小夥伴已經看出來了這里借鑒了一小部分 EventBus 的思想。

回到第一步,那麼具體是如何綁定對網路狀態變化的監聽呢?

以前我們是通過注冊廣播來實現綁定網路變更的監聽,在Android 7.0 以後,Google 基於性能和安全原因對廣播進行了很多限制,比如監聽網路變更的廣播 android.net.conn.CONNECTIVITY_CHANGE 使用靜態注冊的方式則無法生效,而動態注冊的方式雖然可以生效但畢竟不是最優解。

同樣出於性能和安全,以及擁抱變化的角度,最終我們還是使用官方推薦的方式,利用 ConnectivityManager.NetworkCallback 來進行網路變化的監聽,這是在Android 5.0即android api 21推出的API,目前Android 5.0以上的市場佔有率在 85%以上,隨著國內各大廠商正在積極的推進適配普及Android Q,這個比例還會進一步增大,所以個人人認為無需過於擔心低版本適配。

使用的時候出現這個問題是由於少添加了許可權。

Caused by: java.lang.SecurityException: ConnectivityService: Neither user 10513 nor current process has android.permission.ACCESS_NETWORK_STATE.

java.lang.RuntimeException: Unable to create application com.jiyun.wanandroid.WanApplication: java.lang.SecurityException: ConnectivityService: Neither user 10513 nor current process has android.permission.ACCESS_NETWORK_STATE.

加上這幾個許可權就好了:

附上原文地址: https://www.jianshu.com/p/2fea980b3e56

⑶ android 怎麼自定義監聽事件

新建一個android工程,找到工程下res->layout->activity_main.xml文件並打開

從左側工具欄,拖入button到界面上,button默認id為button1

1、在Activity中給button綁定監聽事件(setOnClickListener),代碼如下:
//button綁定監聽事件
Button btn = (Button)findViewById(R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder build = new Builder(MainActivity.this);
build.setMessage("Test").show();
}
});

2、直接在layout.xml中綁定onclick事件;
同時添加對應的監聽事件處理函數
public void Test(View v){
AlertDialog.Builder build = new Builder(this);
build.setMessage("Test").show();
}

運行程序,在模擬器/真機中查看效果
點擊button,彈出Test提示框,說明事件綁定成功。

⑷ android怎麼實現監聽用戶輸入

只要是監聽用戶輸入相關屬性只要進行修改了都會自加。有了這個說明,自己對android虛擬機上的聯系人進行測試,然後把sqlit資料庫導出進行查看,發現VERSION確實發生了改變。有了這個依據,便能很好的解決監聽用戶輸入聯系人數據變化。

首先我先放上一段JAVA的demo展現思路。android代碼稍後放上。

public class ContactJianTing

{

public static void main(String args[])

{

init();

String str = "1-2";

String a[] =str.split("-");

for (String string : a)

{

System.out.println(string);

}

}

private static void init()

{

HashMap a = new HashMap();

HashMap b = new HashMap();

for (int key = 1; key <= 1000; key++)

{

a.put(String.valueOf(key), String.valueOf(key));

b.put(String.valueOf(key), String.valueOf(key+1));

}

Set aSet = a.keySet();

for (String string : aSet)

{

System.out.println(string);

}

long start = System.currentTimeMillis();

for(int i = 1;i<=1000;i++)

{

System.out.println("號碼 "+i);

if(!a.get(String.valueOf(i)).equals(b.get(String.valueOf(i))))

{

System.out.println("數據不同");

}

System.out.println("-----------");

}

long end = System.currentTimeMillis();

long sum = end - start;

System.out.println("總共耗時"+sum);

}

}

在沒有連接資料庫的情況下,使用HashMap,1000條數據耗時40毫秒左右。對於用戶而言,擁有1000個聯系人的手機畢竟少之又少。

⑸ android怎麼監聽輸入字

使用EditText的addTextChangedListener(TextWatcher watcher)方法對EditText實現監聽,TextWatcher是一個介面類,所以必須實現TextWatcher里的抽象方法:

當EditText裡面的內容有變化的時候,觸發TextChangedListener事件,就會調用TextWatcher裡面的抽象方法。

熱點內容
java架構師做什麼 發布:2025-02-08 07:38:32 瀏覽:774
java解碼器 發布:2025-02-08 07:25:35 瀏覽:297
p4忘記密碼了如何刷機 發布:2025-02-08 07:25:25 瀏覽:305
java分隔 發布:2025-02-08 07:15:02 瀏覽:813
源碼乘法豎式 發布:2025-02-08 07:05:48 瀏覽:137
天天酷跑腳本腳本精靈 發布:2025-02-08 07:05:15 瀏覽:346
ios資料庫遷移 發布:2025-02-08 07:00:16 瀏覽:851
安卓sdl是什麼 發布:2025-02-08 07:00:05 瀏覽:908
離線腳本怎麼寫 發布:2025-02-08 06:59:22 瀏覽:833
java學習價錢 發布:2025-02-08 06:58:39 瀏覽:959