android監聽資料庫
Ⅰ android 資料庫怎麼監聽數據變化
在android中經常會用到改變資料庫內容後再去使用資料庫更新的內容,很多人會重新去query一遍,但是這樣的問題就是程序會特別占內存,而且有可能會摟關cursor而導致程序內存未釋放等等。其實android內部提供了一種ContentObserver的東西來監聽資料庫內容的變化。
ContentObserver的構造函數需要一個參數Hanlder,因為ContentObserver內部使用了一個實現Runnable介面的內部類NotificationRunnable,來實現資料庫內容的變化。需要使用hanlder去post消息。注冊ContentObserver的方法是:getContentResolver().registerContentObserver(uri, notifyForDescendents, observer).
上面3個參數為:uri----Uri類型,是需要監聽的資料庫的uri.
notifyForDescendents---boolean true的話就會監聽所有與此uri相關的uri。false的話則是直接特殊的uri才會監聽。一般都設置為true.
observer-----ContentObserver 就是需要的contentobserver.
初始化一個ContentObserver對象,重載onChange(boolean ),在這個方法里去操作資料庫的使用,針對變化後的使用。
Ⅱ android開發 修改了資料庫後怎麼更新
給你提供幾種方法吧:
在查看學生信息的那個Activity裡面,重寫onResume方法,在這個方法裡面獲取數據來顯示視圖,無論是這個activity新創建,還是從後台不可見轉為前台,都會走這個生命周期。
數據顯示頁面監聽數據的變化來更新輸入。如果管理數據使用的是 ContentProvider管理的話,直接使用ContentObserver來監聽相應的Uri即可,如果不是這種方式的話,可以在操作學生資料庫的時候發送一個廣播,然後現實學生頁面的Activity去監聽這個廣播,收到廣播後去更新界面。
如果是從查看信息界面進入的修改信息界面,那麼可以使用startActivityForResult方法啟動信息修改界面,信息修改後調用setResult方法返回修改後的數據給信息顯示界面,信息顯示界面重寫onActivityResult方法來獲取新的學生信息,從而更新界面
暫時就想到這幾種方法吧,希望對你有幫助~
Ⅲ 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系統中,那些被監聽對象有哪些
在android系統中,那些被監聽對象有哪些:1、單擊事件(View.OnClickListener):當用戶觸碰到某個組件或者方向鍵被按下時產生該事件,該事件的處理方法是onClick()。
2、焦點事件(View.OnFocusChangeListener):組件得到或者失去焦點時產生該事件,事件處理方法是onFocusChange()。
3、按鍵事件(View.OnKey Listener):用戶按下或者釋放設備上的某個按鍵時產生,事件處理方法是 onKey()。
4、觸碰事件(View.OnTouchListener):設備具有觸摸屏功能時,觸碰屏幕產生該事件。事件處理方法是onTouch()。
5、創建上下文菜單事件(View.OnCreateContextMenu Listener):創建上下文菜單時產生該事件,事件處理方法是 onCreateContextMenu()。
Ⅳ android怎麼動態監聽arraylist集合的變化
先把 datagridview.datasource = null;設置數據源為空,然後再重新綁一次數據 datagridview.datasource = ArrayList對象。
Ⅵ android開發怎麼監聽網路請求
Android中網路情況時有變化,比如從有網到沒網,從wifi到gprs,gprs又從cmwap到cmnet...等等!
如果你的程序有些功能是需要網路支持的,有時候就需要監聽到網路的變化情況進行相應的處理。
比如說下載一個文件,如果突然斷網了,怎麼處理?網路又恢復了,如何監聽到並重連?
當網路變化的時候系統會發出義個廣播broadcast,只要在程序中注冊一個廣播接收器BroadcastReceiver,並在IntentFilter中添加相應的過濾,這樣一旦網路有變化,程序就能監聽到
public static final String CONNECTIVITY_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
private void registerDateTransReceiver() {
Log.i(TAG, "register receiver " + CONNECTIVITY_CHANGE_ACTION);
IntentFilter filter = new IntentFilter();
filter.addAction(CONNECTIVITY_CHANGE_ACTION);
filter.setPriority(1000);
registerReceiver(new MyReceiver(), filter);
}
在MyReceiver中:
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.i(TAG, "PfDataTransReceiver receive action " + action);
if(TextUtils.equals(action, CONNECTIVITY_CHANGE_ACTION)){//網路變化的時候會發送通知
Log.i(TAG, "網路變化了");
return;
}
}
當網路變化時,從有網到沒網也會發廣播,就舉的例子來說,如果下載時斷網了,接收到廣播的時候要判斷當前網路是可用還是不可用狀態,如果可用進行什麼操作;不可用進行什麼操作:
public static NetworkInfo getActiveNetwork(Context context){
if (context == null)
return null;
ConnectivityManager mConnMgr = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (mConnMgr == null)
return null;
NetworkInfo aActiveInfo = mConnMgr.getActiveNetworkInfo(); // 獲取活動網路連接信息
return aActiveInfo;
}
這個方法返回的aActiveInfo可以判斷網路的有無,如果返回的是null,這時候是斷網了,如果返回對象不為空,則是連上了網。在返回的NetworkInfo對象里,可以有對象的方法獲取更多的當前網路信息,比如是wifi還是cmwap等,就不多說了。
Ⅶ 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