這個叫做mediaprovider.apk是幹什麼的呢,和我們今天講的東西有啥關聯嗎,其實這是乙個正在執行的apk,這個apk是沒有介面的,因此我們是看不見的,他的作用就是在後台默默的為我們收集相關的資料資訊。,然後儲存在資料庫裡面
從上面的截圖上看,這個apk把我們收集內的**資訊都儲存在資料庫中了,那麼接下來我們只需要讀取資料庫,拿到相關的資源即可了。
這裡獲取資源,我給大家提供三種方式
子執行緒+handler
自帶的非同步任務asynctask
asyncqueryhandler
子執行緒+handler:
這個首先是建立子執行緒:
//這個是android中的內容提供者,上面所說的三種方式都需要用到這個,主要提供android手機的內的基本資料資訊
val resolver = context?
.contentresolver
thread
(object
:runable})
.start()
object cursorutil
----value===$")
}println
("*****====下一條資料")}}}}
下面我們來看一下query的原始碼資訊
/**
通過提供的uri資訊,返回乙個cursor資料
* query the given uri, returning a over the result set.
* 第乙個引數是uri資訊
* @param uri the uri, using the content:// scheme, for the content to
* retrieve.
* 第二個引數是需要返回的資料條目有哪些,例如名字、作者、大小
* @param projection a list of which columns to return. passing null will
* return all columns, which is inefficient.
* 第三個引數是根據條件返回多少行。如果為空則返回所有行 這個相當於sql語句後面的where語句
* @param selection a filter declaring which rows to return, formatted as an
* sql where clause (excluding the where itself). passing null will
* return all rows for the given uri.
* 選擇包括哪些選項,一般寫null
* @param selectionargs you may include ?s in selection, which will be
* replaced by the values from selectionargs, in the order that they
* 這個引數相當於orderby的效果,一般寫null
* @param sortorder how to order the rows, formatted as an sql order by
* clause (excluding the order by itself). passing null will use the
* default sort order, which may be unordered.
* @return a cursor object, which is positioned before the first entry, or null
* @see cursor
*/public
final
@nullable cursor query
(@requirespermission
.read @nonnull uri uri,
@nullable string[
] projection,
@nullable string selection,
@nullable string[
] selectionargs,
@nullable string sortorder)
下面是列印出來的結果
上面是直接的handler+執行緒的方式
/**
*這裡注意這個三個引數
第乙個引數數傳遞進來的引數
第二個引數表示的進度更新的時候向外傳遞的資料
第三個引數是處理完後的引數
*/class
audiotask
:asynctask()
ovveride fun onpostexecute
(result: cursor?
)//這個方式是在非同步任務之前準備的函式
override fun onpreexecute()
//這個函式是在主線程中執行的,一般用於更新進度
override fun onprogressupdate
(vararg values: void?
)]
上面就是以非同步任務的方式,是不是感覺很爽呢,下面再介紹乙個種更爽的方式。
從名字上看是不是已經看出來了是非同步加handler呢,接下來看怎麼實現吧
val handler = object:
asyncqueryhandler
(resolver)
}handler.
startquery(0
,null,mediastore.audio.media.external_content_uri,
arrayof
(mediastore.audio.media.data,
mediastore.audio.media.size,
mediastore.audio.media.display_name,
mediastore.audio.media.artist)
,null,null,null)
上面這種是不是更爽呢,三種方式就介紹到這裡把,看大家怎麼選 android 獲取手機記憶體大小
一 先說下非原創,拷貝的,寫上作個記錄,再自己加了些注釋。獲取手機記憶體大小 系統裡乙個檔案裡記錄著記憶體的大小,可以從那個檔案裡讀,檔名為meminfo return public string gettotalmemory initial memory integer.valueof array...
Android 獲取手機的手機號
1.獲取手機號 telephonymanager telephonymanager telephonymanager getsystemservice context.telephony service string line1number telephonymanager.getline1numb...
Android中實時獲取聲音頻率
實現思路 1.通過audiorecord類讀取mic傳入的資料 2.對讀取的資料進行快速傅利葉變換 3.計算出進過計算後的複數的模即為需要的頻率 第一步很好實現,new 乙個audiorecord即可實現讀取mic的輸入,簡略版 如下 audiorecord audiorecord new audi...