androidfilter
㈠ android代碼使用SimpleAdapter的filter方法進行過濾問題。
我不知道你的問題在哪。源碼有限。這種情況你截圖也許能發所有源碼的信息。
我自己寫了方法。能實現數據的過濾。
package com.example.simpleadapterfilter_08_16;
import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends Activity {
List<String> listString;
ArrayAdapter arrayAdapter;
ListView listview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listString=new ArrayList<String>();
listString.add("SOLAR EAST INC");
listString.add("BUTSTRI");
listString.add("張三");
listString.add("湖北 湖南");
arrayAdapter=new ArrayAdapter<String>(this,R.layout.textview_source, listString);
listview=(ListView) findViewById(R.id.listView1);
// 這句話是重點,可以對內容進行過濾。
arrayAdapter.getFilter().filter("SOLAR EAST INC");
listview.setAdapter(arrayAdapter);
}
}
㈡ android開發中lntent與lntentFilter的作用
intent顧名思義,意圖。用於組件間通信。比如啟動一個activity,發送一個broadcast。
啟動activity的時候,在intent中添加內容,即可從當前類傳遞數據到一個activity中。
發送broadcast的時候,需要設置intent.setAction("意圖"),這里可以理解為發送一個什麼樣意圖的廣播。
sendBroadCast(intent);
在broadcastReceiver注冊時,就需要用到intentFilter,用於廣播接收的過濾。因為系統也會隨時發送許多廣播,你只想接收想要的廣播。
IntentFilter filter = new IntentFilter("some action");
registerBroadCastReceiver(receiver,filter);
㈢ android程序開發中 AndroidManifest.xml下的intent_filter怎麼配置
在intent中設置action,
data,
categroy之後在對應的intentfilter中設置相同的屬性即可通過過濾被activity調用
詳細的過濾規則你上網查查吧~
特別是data的過濾規則~
實在找不到我再給你打吧~
東西太多。。。懶的打。。。
㈣ android filter 怎麼實現
千 鋒扣丁學堂iOS開發為您解答: 1. Android把安裝的包中可獲得的Intent Filter放到一個列表中。 2. 動作和與正在解析的Intent的種類不關聯的Intent Filter會從列表中刪除。 2.1. 動作匹配指Android Intent Filter包含特定的動作或沒有指定的動作。一個Intent Filter有一個或多個定義的動作,如果沒有任何一個能與Intent指定的動作匹配的話,這個Intent Filter在算作是動作匹配檢查失敗。 2.2. 種類匹配更為嚴格。Intent Filter必須包含所有在解析的Intent中定義的種類。一個沒有特定種類的Intent Filter只能與沒有種類的Intent匹配。 3. Intent的數據URI中的部分會與Intent Filter中的data標簽比較。如果Intent Filter定義scheme,host/authority,path或mimetype,這些值都會與Intent的URI比較。任何不匹配都會導致Intent Filter從列表中刪除。 沒有指定data值的Android Intent Filter會和所有的Intent數據匹配。 3.1. mimetype是正在匹配的數據的數據類型。當匹配數據類型時,你可以使用通配符來匹配子類型(例如,earthquakes/*)。如果Intent Filter指定一個數據類型,它必須與Intent匹配;沒有指定數據的話全部匹配。 3.2. scheme是URI部分的協議——例如,http:,mailto:,tel:。 3.3. host-name或「data authority」是介於URI中scheme和path之間的部分。匹配主機名時,Intent Filter的scheme也必須通過匹配。 3.4. 數據path是緊接在「data authority」的後面(例如,/ig)。path只在scheme和host-name部分都匹配的情況下才匹配。 4. 如果這個過程中多於一個組件解析出來的話,它們會以優先度來排序,可以在Android Intent Filter的節點里添加一個可選的標簽。最高等級的組件會返回。 Android本地的應用程序組件和第三方應用程序一樣,都是Intent解析過程中的一部分。它們沒有更高的優先度,可以被新的Activity完全的代替,這些新的Activity宣告自己的Intent Filter能響應相同的動作請求。
㈤ android 簡訊攔截如何設置最高的優先順序
首先寫一個應用,注冊一個開機完成廣播接收者。
<receiver android:name=".MyBrocast" android:permission="android.permission.BROADCAST_SMS">
<intent-filter android:priority="2147483647">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
<intent-filter android:priority="2147483647">
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
然後在這個廣播接收者接收到信息之後馬上啟動一個service
public void onReceive(Context context, Intent intent) {
Log.v("MyBrocast.onReceive", "testtttttttttttt");
if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)){
Intent service=new Intent(context, MyService.class);
context.startService(service);
}
然後在service重新注冊一個接收簡訊的廣播接收者,優先順序2147483647
IntentFilter localIntentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
localIntentFilter.setPriority(2147483647);
myService = new MyBrocast();
MyBrocast localMessageReceiver = myService;
Log.v("MyBrocast.onReceive", "onCreate");
Intent localIntent = registerReceiver(localMessageReceiver, localIntentFilter);
這種重啟手機就OK了,你也可以讓360,QQ郁悶的。
㈥ Android Studio的intent-filter,action,category是什麼
准確來說這仨不屬於Android studio,而是屬於Android系統里的重要的三個屬性。
註:Android系統里一些屬性或者名詞的翻譯總是不能確切表達其真實的含義,僅供理解參考。
Android基本的設計理念是鼓勵減少組件間的耦合,因此Android提供了Intent (意圖) ,Intent提供了一種通用的消息系統,它允許在你的應用程序與其它的應用程序間傳遞Intent來執行動作和產生事件。使用Intent可以激活Android應用的三個核心組件:活動、服務和廣播接收器。
提起intent-filter(意圖過濾器),首先得知道Intent(意圖),Intent Filter(意圖過濾器)其實就是用來匹配隱式Intent的,當一個意圖對象被一個意圖過濾器進行匹配測試時,只有三個方面會被參考到:動作、數據(URI以及數據類型)和類別。這其中就包含action和category.
action表示你接下來的行為,比如你要打開一個新的activity,這個行為就成為一個動作。
category表示這個動作的類型。
我們來舉個例子:
<activity android:name=".SplashActivity" android:theme="@style/LaunchScreenTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
用一句通俗的話描述就是:當intent-filter收到帶有action為"android.intent.action.MAIN"de intent時,就會執行category里的「android.intent.category.LAUNCHER」對SplashActivity進行操作。
㈦ android的intentfilter中category具體怎麼個用法
這個屬性是用來設置類別的也就是對action進行補充說明用的正常,用來表示當前執行環境。也就是比如是手機,車載電腦,還是機頂盒,瀏覽器等。默認就是手機上運行。
http://blog.csdn.net/weihan1314/article/details/7973511
㈧ FFmpeg命令行語法之-filter_complex (Android環境)
廢話少說,先舉個例子
這個例子其實在 android端使用ffmpeg給視頻添加圖片水印 里已經說過了。
這是一個給視頻打上圖片水印的命令。
然而,他打的不是一個普通的水印,而是兩個。
命令看上去很簡潔。然而(又是然而),正因為他這么簡潔,所以一開始上來未免搞不清他實際是什麼意思。
來,我們把他拆開,其實他由以下部分組成:
1、2、4部分的含義一目瞭然。3里頭的scale和overlay也是字面的意思,不難理解。然而,-filter_complex濾鏡的參數結構就不是那麼好理解了,比如說那一坨[]里頭的東西是什麼鬼?
來,一個個解釋。
[1:v]這個里頭兩個參數,1表示的是操作對象的編號。在本例中0就是原始視頻文件input.mp4,1就是image1.png,2就是image2.png,3就是output.mp4。而另一個參數v表示操作對象里的視頻信息。
[img1]是這個操作過濾器的名字。(當然名字可以隨便起)
所以這頭一句 [1:v]scale=100:100[img1] 的意思就是對圖片imagei.png進行調節尺寸的操作,並將這個操作的結果命名為img1。後面的[2:v]和[img2]也是一個意思。
我們繼續,overlay前面 [0:v][img1] 湊一起是什麼意思呢。0自然就是指的原始視頻,這句的意思就是將[img1]疊加到0對象的視頻上。本例中就是把image1.png疊加到input.mp4上。這里需要注意的就是順序:後一個對象疊加到前一個上,後一個對象在上層。如果寫成 [img1][0:v] ,那相對本例其實就是把視頻疊加到圖片imge1.png上。這樣的話一般來說由於視頻通常是全屏,等於用視頻覆蓋了圖片,水印完全看不到了。
好,我們又把這個操作的結果命名為[bkg],那麼接下來 [bkg][img2] 的意思就很明了了。就是把image2.png再疊加上去,image2.png是在最上層的,如果位置重合的話,他會遮蓋 image1.png的水印。
於是,事就這樣成了。
1.水印的移動:
這里需要用到時間參數。
比如: overlay=0+t*20:0
這里在x坐標上加上了 +t*10 ,於是水印就會慢慢向右邊移動。
2.特定時間顯示水印:
這次不僅要用到時間參數,還要用上條件語句。
if條件語句的基本結構就是
再來看看計算表達式。
這里用到了表達式 gte(x,y) 。如果x大於等於y則表達式的值為1,反之為0。
所以 if(gte(t,2),10,NAN) 的意思就是,當時間大於等於2秒時,水印x位置為10,反之不顯示水印。(或者你也可以用 lte 來判斷「小於或等於」)
要了解所有表達式的話,可以去啃一下ffmpeg官方文檔的 Expression Evaluation 部分。
參考:
ffmpeg 基本用法大全
ffmpeg Documentation
㈨ android開發的AndroidManifest.xml為何要有 <intent-filter> ,這是什麼作用
意圖過濾器說白了就是在你啟動程序時,最先啟動的是那個activity。所以說<intent-filter>是必須有的。 否則android不知道先啟動誰。
㈩ android怎樣緩存數據面試題
共有七個周期函數,按順序分別是: onCreate(), onStart(), onRestart(), onResume(), onPause(),onStop(), onDestroy()。
onCreate(): 創建Activity時調用,設置在該方法中,還以Bundle的形式提供對以前存儲的任何狀態的訪問。
onStart(): Activity變為在屏幕上對用戶可見時調用。
onResume(): Activity開始與用戶交互時調用(無論是啟動還是重新啟動一個活動,該方法總是被調用。
onPause(): Activity被暫停或收回cpu和其他資源時調用,該方法用戶保護活動狀態的,也是保護現場。
onStop(): Activity被停止並轉為不可見階段及後續的生命周期事件時調用。
onRestart(): Activity被重新啟動時調用。該活動仍然在棧中,而不是啟動新的Activity。
1、完整生命周期: 即從一個Activity從出現到消失,對應的周期方法是從onCreate()到onDestroy()。
2、可見生命周期: 當Activity處於可以用戶看見的狀態,但不一定能與用戶交互時,將多次執行從onStart()到onStop()。
3、前景生命周期: 當Activity處於Activity棧最頂端,能夠與其他用戶進行交互時,將多次執行從onResume()到onPause()。
2. 兩個Activity之間跳轉時必然會執行的是哪幾個方法。
答: 兩個Activity之間跳轉必然會執行的是下面幾個方法。
onCreate()//在Activity生命周期開始時調用。
onRestoreInstanceState()//用來恢復UI狀態。
onRestart()//當Activity重新啟動時調用。
onStart()//當Activity對用戶即將可見時調用。
onResume()//當Activity與用戶交互時,繪制界面。
onSaveInstanceState()//即將移出棧頂保留UI狀態時調用。
onPause()//暫停當前活動Activity,提交持久數據的改變,停止動畫或其他佔用GPU資源的東西,由於下一個Activity在這個方法返回之前不會resume,所以這個方法的代碼執行要快。
onStop()//Activity不再可見時調用。
onDestroy()//Activity銷毀棧時被調用的最後一個方法。
3. 橫豎屏切換時候Activity的生命周期。
答:
1、不設置Activity的android: configChanges時,切屏會重新調用各個生命周期,切橫屏時會執行一次,切豎屏時會執行兩次。
2、設置Activity的android: configChanges=「orientation」時,切屏還是會重新調用各個生命周期,切橫、豎屏時只會執行一次。
3、設置Activity的android: configChanges=「orientation|keyboardHidden」時,切屏不會重新調用各個生命周期,只會執行onConfiguration方法
4. 如何將一個Activity設置成窗口的樣式。
答: 第一種方法,在styles.xml文件中,可以新建如下的類似Dialog的style。
<style name=「Theme.FloatActivity」 parent=「android:style/Theme.Dialog」> </style>。
第二種方法,在AndroidManifest.xml中在需要顯示為窗口的Activity中添加如下屬性: android: theme=「@style/Theme.FloatActivity」即可。也可以直接添加對應需要展示為Dialog style的Activity的android: theme屬性為android: theme=「@ android: style/Theme.Dialog」。
5. 兩個Activity之間怎麼傳遞數據?
答: 可以在Intent對象中利用Extra來傳遞存儲數據。
在Intent的對象請求中,使用putExtra(「鍵值對的名字」,」鍵值對的值」);在另外一個Activity中將Intent中的請求數據取出來:
Intent intent = getIntent();
String value = intent.getStringExtra(「testIntent」);
6. 怎麼讓在啟動一個Activity是就啟動一個service?
答: 首先定義好一個service,然後在Activity的onCreate裡面進行連接並bindservice或者直接startService。
7. Activity怎麼和service綁定,怎麼在activity中啟動自己對應的service?
答:
1、activity能進行綁定得益於Serviece的介面。為了支持Service的綁定,實現onBind方法。
2、Service和Activity的連接可以用ServiceConnection來實現。需要實現一個新的ServiceConnection,重現onServiceConnected和OnServiceDisconnected方法,一旦連接建立,就能得到Service實例的引用。
3、執行綁定,調用bindService方法,傳入一個選擇了要綁定的Service的Intent(顯示或隱式)和一個你實現了的ServiceConnection的實例
8.什麼是Service以及描述下它的生命周期。Service有哪些啟動方法,有什麼區別,怎樣停用Service?
答: Android Service是運行在後台的代碼,不能與用戶交互,可以運行在自己的進程,也可以運行在其他應用程序進程的上下文里。需要通過某一個Activity或者Context對象來調用。Service有兩個啟動方法,分別是Context.startService()和Context.bindService()。如果在Service執行耗時的操作需要啟動一個新線程來執行。
Android Service只繼承了onCreate(), onStart(),onDestroy()三個方法,當我們第一次啟動Service時,先後調用onCreate(), onStart()這兩個方法,當停止Service時,則執行onDestroy()方法時。如果Service已經啟動了,當我們再次啟動Service時,不會再執行onCreate()方法,而是直接執行onStart()方法。
9. 什麼時候使用Service?
答: 比如播放多媒體的時候,用戶啟動了其他Activity,這個時候程序要在後台繼續播放,比如檢測SD卡上文件的變化,再或者在後台記錄你的地理信息位置的改變等等。
10. 請描述一下Intent 和 Intent Filter。
答: Intent在Android中被翻譯為」意圖」,他是三種應用程序基本組件-Activity,Service和broadcast receiver之間相互激活的手段。在調用Intent名稱時使用ComponentName也就是類的全名時為顯示調用。這種方式一般用於應用程序的內部調用,因為你不一定會知道別人寫的類的全名。而Intent Filter是指意圖過濾,不出現在代碼中,而是出現在android Manifest文件中,以<intent-filter>的形式。(有一個例外是broadcast receiver的intent
filter是使用Context.registerReceiver()來動態設定的,其中intent filter也是在代碼中創建的)
一個intent有action,data,category等欄位。一個隱式intent為了能夠被某個intent filter接收,必須通過3個測試,一個intent為了被某個組件接收,則必須通過它所有的intent filter中的一個。
11. Intent傳遞數據時,可以傳遞哪些類型數據?
答: intent間傳送數據一般有兩種常用的方法: 1、extra 2、data。
extra可以用Intent.putExtra放入數據。新啟動的Activity可用Intent.getExtras取出Bundle,然後用Bundles.getLong,getInt,getBoolean,getString等函數來取放進去的值。
Data則是傳輸url。url可以是指我們熟悉的http,ftp等網路地址,也可以指content來指向ContentProvider提供的資源。Intent.setData可以放入數據,Intent.getData可以取出數據。
12. 說說Activity,Intent,Service是什麼關系 ?
答: 一個Activity通常是一個單獨的屏幕,每一個Activity都被實現為一個單獨的類,這些類都是從Activity基類中繼承而來的。Activity類會顯示由視圖控制項組成的用戶介面,並對視圖控制項的事件做出響應。
Intent的調用是用來進行屏幕之間的切換。Intent描述應用想要做什麼。Intent數據結構中兩個最重要的部分是動作和動作對應的數據,一個動作對應一個動作數據。
Service是運行在後台的代碼,不能與用戶交互,可以運行在自己的進程里,也可以運行在其他應用程序進程的上下文里。需要一個Activity或者其他Context對象來調用。
Activity跳轉Activity,Activity啟動Service,Service打開Activity都需要Intent表明意圖,以及傳遞參數,Intent是這些組件間信號傳遞的承載著。
13. 請描述一下BroadcastReceiver。
答: Broadcast Receiver用於接收並處理廣播通知(broadcast announcements)。多數的廣播是系統發起的,如地域變換、電量不足、來電簡訊等。程序也可以播放一個廣播。程序可以有任意數量的broadcast receivers來響應它覺得重要的通知。Broadcast receiver可以通過多種方式通知用戶: 啟動activity、使用NotificationManager、開啟背景燈、振動設備、播放聲音等,最典型的是在狀態欄顯示一個圖標,這樣用戶就可以點它打開看通知內容。通常我們的某個應用或系統本身在某些事件(電池電量不足、來電簡訊)來臨時會廣播一個Intent出去,我們利用注冊一個broadcast
receiver來監聽這些Intent並獲取Intent中的數據。
14. 在manifest和代碼中如何注冊和使用 broadcast receiver 。
答: 在android的manifest中注冊
<receiver android: name =「Receiver1」>
<intent-filter>
<!----和Intent中的action對應--->
<actionandroid: name=「com.forrest.action.mybroadcast」/>
</intent-filter>
</receiver>
在代碼中注冊
1、 IntentFilter filter = new IntentFilter(「com.forrest.action.mybroadcast」);//和廣播中Intent的action對應;
2、 MyBroadcastReceiver br= new MyBroadcastReceiver();
3、 registerReceiver(br, filter);
15. 請介紹下ContentProvider是如何實現數據共享的。
答: 一個程序可以通過實現一個Content provider的抽象介面將自己的數據完全暴露出去,而且Content provider是以類似資料庫中的表的方式將自己的數據暴露。Content provider存儲和檢索數據,通過它可以讓所有的應用程序訪問到,這也是應用程序之間唯一共享數據的方法。
要想使應用程序的數據公開化,可通過2種方法:創建一個數據自己的Content Provider或者將你的數據添加到一個已經存在的Content Provider中,前提是有相同數據類型並且有寫入Content Provider的許可權,Android提供了Content Resolverr,外界的程序可以通過Content Resolver介面訪問Content Provider提供的數據。
16. 請介紹下Android的數據存儲方式。
答: Android提供了5中存儲數據的方式,分別是以下幾種
1、使用Shared Preferences存儲數據,用來存儲key-value,pairs格式的數據,它是一個輕量級的鍵值存儲機制,只可以存儲基本數據類型。
2、使用文件存儲數據,通過FileInputStream和FileOutputStream對文件進行操作。在Android中,文件是一個應用程序私有的,一個應用程序無法讀寫其他應用程序的文件。
3、使用SQLite資料庫存儲數據,Android提供的一個標准資料庫,支持SQL語句。
4、使用Content Provider存儲數據,是所有應用程序之間數據存儲和檢索的一個橋梁,它的作用就是使得各個應用程序之間實現數據共享。它是一個特殊的存儲數據的類型,它提供了一套標準的介面用來獲取數據,操作數據。系統也提供了音頻、視頻、圖像和個人信息等幾個常用的Content Provider。如果你想公開自己的私有數據,可以創建自己的Content Provider類,或者當你對這些數據擁有控制寫入的許可權時,將這些數據添加到Content Provider中實現共享。外部訪問通過Content Resolver去訪問並操作這些被暴露的數據。
5、使用網路存儲數據
17. 請介紹下Android中常用的五種布局。
答: 最常用的布局方式為Absolute Layout、Relative Layout、Linear Layout、FrameLayout、TableLayout。其中Linear Layout和Relative Layout是最常用的方式,他們可以通過在xml配置文件或者代碼中進行布局。
1、Frame Layout是最簡單的布局方式,放置的控制項都只能羅列到左上角,控制項會有重疊,不能進行復雜的布局。
2、Linear Layout可以通過orientation屬性設置線性排列的方向是垂直還是縱向的,每行或每列只有一個元素,可以進行復雜的布局。
3、Absolute Layout可以讓子元素指定準確的x、y坐標值,並顯示在屏幕上。Absolute Layout沒有頁邊框,允許元素之間相互重疊。它是絕對坐標,所以在實際中不提倡使用。
4、Relative Layout允許子元素制定他們相對於其他元素或父元素的位置(通過ID制定)。因此,你可以以右對齊,或上下,或置於屏幕中央的形式來排列兩個元素。元素按順序排列,因此如果第一個元素在屏幕的中央,那麼相對於這個元素的其他元素將以屏幕中央的相對位置來排列。這個是相對於Absolute Layout的,採用相對坐標,所以在實際中比較常用。
5、Table Layout將以子元素的位置分配到行或列。一個Table Layout由許多的Table Row組成,每個Table Row都會定義一個row。Table Layout容器不會顯示row、column或者cell的邊線框。每個row擁有0個或多個的cell; 和html中的table差不多。在實際中也經常使用。
18. 談談UI中, Padding和Margin有什麼區別?
答: Padding是控制項的內容相對控制項的邊緣的邊距,而Margin是控制項邊緣相對於其他控制項的邊距。如下圖所示:
19. android本身的一些限制,比如apk包大小限制,讀取大文件時的時間限。
答:apk包大小限制不好說,有的apk為100M,還是能裝到手機上。一般的apk大小為5~10M左右。讀取大文件的時間應該是在main線程裡面,時間限制為5秒左右。
20. ListView如何提高其效率?
答:1、使用分頁載入,不要一次性載入所有數據。
2、復用convertView。在getItemView中,判斷converView是否為空,如果不為空,可復用。
3、非同步載入圖片。Item中如果包含有webimage,那麼最好非同步載入。
4、快速滑動時,不顯示圖片。當快速滑動列表(SCROLL_STATE_FLING),item中的圖片或獲取需要消耗資源的view,可以不顯示出來;而處於其他兩種狀態(SCROLL_STATE_IDLE和SCROLL_STATE_TOUCH_SCROLL),則將那些view顯示出來