顯示網頁:
城口網站制作公司哪家好,找創新互聯!從網頁設計、網站建設、微信開發、APP開發、響應式網站建設等網站項目制作,到程序開發,運營維護。創新互聯于2013年創立到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創新互聯。
1. Uri uri = Uri.parse("");
2. Intent it = new Intent(Intent.ACTION_VIEWuri);
3. startActivity(it);123123
顯示地圖:
1. Uri uri = Uri.parse("geo:38.-77.");
2. Intent it = new Intent(Intent.Action_VIEWuri);
3. startActivity(it);123123
路徑規劃:
1. Uri uri = Uri.parse("");
2. Intent it = new Intent(Intent.ACTION_VIEWURI);
3. startActivity(it);123123
撥打電話:
調用撥號程序
1. Uri uri = Uri.parse("tel:xxxxxx");
2. Intent it = new Intent(Intent.ACTION_DIAL uri);
3. startActivity(it);
4. 1. Uri uri = Uri.parse("tel.xxxxxx");
2. Intent it =new Intent(Intent.ACTION_CALLuri);
3. 要運用這個必須在配置文件中加入12345671234567
發送SMS/MMS
調用發送短信的程序
1. Intent it = new Intent(Intent.ACTION_VIEW);
2. it.putExtra("sms_body" "The SMS text");
3. it.setType("vnd.android-dir/mms-sms");
4. startActivity(it);1234512345
發送短信
1. Uri uri = Uri.parse("smsto:03");
2. Intent it = new Intent(Intent.ACTION_SENDTO uri);
3. it.putExtra("sms_body" "The SMS text");
4. startActivity(it);12341234
發送彩信
1. Uri uri = Uri.parse("content://media/external/images/media/23");
2. Intent it = new Intent(Intent.ACTION_SEND);
3. it.putExtra("sms_body" "some text");
4. it.putExtra(Intent.EXTRA_STREAM uri);
5. it.setType("image/png");
6. startActivity(it);123456123456
發送Email
1.
2. Uri uri = Uri.parse("mailto:");
3. Intent it = new Intent(Intent.ACTION_SENDTO uri);
4. startActivity(it);
1. Intent it = new Intent(Intent.ACTION_SEND);
2. it.putExtra(Intent.EXTRA_EMAIL "");
3. it.putExtra(Intent.EXTRA_TEXT "The email body text");
4. it.setType("text/plain");
5. startActivity(Intent.createChooser(it "Choose Email Client"));
1. Intent it=new Intent(Intent.ACTION_SEND);
2. String[] tos={""};
3. String[] ccs={""};
4. it.putExtra(Intent.EXTRA_EMAIL tos);
5. it.putExtra(Intent.EXTRA_CC ccs);
6. it.putExtra(Intent.EXTRA_TEXT "The email body text");
7. it.putExtra(Intent.EXTRA_SUBJECT "The email subject text");
8. it.setType("message/rfc822");
9. startActivity(Intent.createChooser(it "Choose Email Client"));12345678910111213141516171819201234567891011121314151617181920
添加附件
1. Intent it = new Intent(Intent.ACTION_SEND);
2. it.putExtra(Intent.EXTRA_SUBJECT "The email subject text");
3. it.putExtra(Intent.EXTRA_STREAM "");
4. sendIntent.setType("audio/mp3");
5. startActivity(Intent.createChooser(it "Choose Email Client"));123456123456
播放多媒體
1.
2. Intent it = new Intent(Intent.ACTION_VIEW);
3. Uri uri = Uri.parse("");
4. it.setDataAndType(uri "audio/mp3");
5. startActivity(it);
1. Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI "1");
2. Intent it = new Intent(Intent.ACTION_VIEW uri);
3. startActivity(it);123456789123456789
Uninstall 程序
1. Uri uri = Uri.fromParts("package" strPackageName null);
2. Intent it = new Intent(Intent.ACTION_DELETE uri);
3. startActivity(it);12341234
* 安裝指定apk
*
進入聯系人頁面
Intent intent=newIntent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(People.CONTENT_URI);
startActivity(intent);12341234
/檢查指定聯系人
Uri personUri=ContentUris.withAppendedId(People.CONTENT_URI info.id);//info.id聯系人ID
Intent intent=newIntent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(personUri);
startActivity(intent);1234512345
調用系統安裝一個apk
Intent intent=newIntent();
intent.setDataAndType(Uri.parse()"application/vnd.android.package-archive");
startActivity(intent);123123
//調用相冊
public static final String MIME_TYPE_IMAGE_JPEG = "image/*";
public static final int ACTIVITY_GET_IMAGE = 0;
Intent getImage = new Intent(Intent.ACTION_GET_CONTENT);
getImage.addCategory(Intent.CATEGORY_OPENABLE);
getImage.setType(MIME_TYPE_IMAGE_JPEG);
startActivityForResult(getImage ACTIVITY_GET_IMAGE);12345671234567
//調用系統相機應用程序,并存儲拍下來的照片
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
time = Calendar.getInstance().getTimeInMillis();
intent.putExtra(MediaStore.EXTRA_OUTPUT Uri.fromFile(new File(Environment
.getExternalStorageDirectory().getAbsolutePath()+"/tucue" time + ".jpg")));
startActivityForResult(intent ACTIVITY_GET_CAMERA_IMAGE);
@paramapkname apk名稱
publicvoidsetupAPK(String apkname){
String fileName=Environment.getExternalStorageDirectory()+"/"+apkname;
Intent intent=newIntent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(newFile(fileName))"application/vnd.android.package-archive");
mService.startActivity(intent);
}1234567891011121312345678910111213
AIDL-基本使用
AIDL-自定義數據類型
AIDL-修飾符in,out,inout
AIDL-重連方法
AIDL-接口注冊/解注冊
AIDL-連接池
為什么要特意講解一下接口的注冊與取消注冊呢,因為在使用AIDL進程跨進程通信的時候, 每次傳遞的接口對象在內存中的地址都是不一樣的 ,所以在注冊了之后,無法使用常規的方式去取消, 因為注冊和解注冊傳遞的接口地址都不一樣 ,系統無法識別
由于上面的問題,AIDL中提供了一個專門解決上述情況的類 RemoteCallbackList ,其工作原理就是:
首先,在前面講解 AIDL的基本使用 的基礎上先增加新的AIDL接口以及注冊和解注冊方法:
然后就是 RemoteCallbackList 的使用方法了:
注冊/解注冊很簡單
接著是使用接口的方式:
ps: 需要注意的是 beginBroadcast() 方法和 finishBroadcast() 方法 必須配合使用 ,哪怕只是簡單的獲取集合大小
使用AIDL進行跨進程間通信中,往往我們是需要注冊監聽,讓服務端通知的,但是服務端也必須提供解注冊的方法,不然客戶端如果離開某個界面不想再接受消息了,雖然直接離開不做處理客戶端這邊不會出錯,但是服務端那邊的監聽集合還存在之前的,那么就會浪費系統資源,所以有注冊監聽的時候,最好也要實現解注冊的方法
《Android開發藝術探索》
MediaCodec 是Android 4.1(api 16)版本引入的編解碼接口, Developer 官網 上描述的已經很清楚了。可以配合 中文翻譯 一起看。理解更深刻。
MediaCodec的工作流程:
從上圖可以看出 MediaCodec 架構上采用了2個緩沖區隊列,異步處理數據,并且使用了一組輸入輸出緩存。
你請求或接收到一個空的輸入緩存(input buffer),向其中填充滿數據并將它傳遞給編解碼器處理。編解碼器處理完這些數據并將處理結果輸出至一個空的輸出緩存(output buffer)中。最終,你請求或接收到一個填充了結果數據的輸出緩存(output buffer),使用完其中的數據,并將其釋放給編解碼器再次使用。
具體工作如下:
MediaCodec的基本調用流程是:
1.初始化MediaCodec,方法有兩種,分別是通過名稱和類型來創建,對應的方法為:
2.配置編碼器,設置各種編碼器參數(MediaFormat),這個類包含了比特率、幀率、關鍵幀間隔時間等。然后再調用 mMediaCodec .configure,對于 API 19 以上的系統,我們可以選擇 Surface 輸入:mMediaCodec .createInputSurface,
3.打開編碼器,獲取輸入輸出緩沖區
獲取輸入輸出緩沖區在api19 上是以上方式獲取,api21以后 可以使用直接獲取ByteBuffer
4.輸入數據,有2種方式,一種是普通輸入,一種是Surface 輸入
普通輸入又可區分為兩種情況,一種是配合MediaExtractor ,一種是取原數據;
返回一個填充了有效數據的input buffer的索引,如果沒有可用的buffer則返回-1,參數為超時時間(TIMES_OUT),單位是微秒,當timeoutUs==0時,該方法立即返回;當timeoutUs0時,無限期地等待一個可用的input buffer,當timeoutUs0時,
等待時間為傳入的微秒值。
上面輸入緩存的index,通過getInputBuffers()得到的是輸入緩存數組,通過index和輸入緩存數組可以得到當前請求的輸入緩存,在使用之前要clear一下,避免之前的緩存數據影響當前數據,接著就是把數據添加到輸入緩存中,并調用queueInputBuffer(...)把緩存數據入隊;
5.輸出數據
通常編碼傳輸時每個關鍵幀頭部都需要帶上編碼配置數據(PPS,SPS),但 MediaCodec 會在首次輸出時專門輸出編碼配置數據,后面的關鍵幀里是不攜帶這些數據的,所以需要我們手動做一個拼接;
6.使用完MediaCodec后釋放資源
要告知編碼器我們要結束編碼,Surface 輸入的話調用 mMediaCodec .signalEndOfInputStream,普通輸入則可以為在 queueInputBuffer 時指定 MediaCodec.BUFFER_FLAG_END_OF_STREAM 這個 flag;告知編碼器后我們就可以等到編碼器輸出的 buffer 帶著 MediaCodec.BUFFER_FLAG_END_OF_STREAM 這個 flag 了,等到之后我們調用 mMediaCodec .release 銷毀編碼器
流控就是流量控制。 為什么要控制,就是為了在一定的限制條件下,收益最大化!
涉及到了 TCP 和視頻編碼:
對 TCP 來說就是控制單位時間內發送數據包的數據量,對編碼來說就是控制單位時間內輸出數據的數據量。
TCP 的限制條件是網絡帶寬,流控就是在避免造成或者加劇網絡擁塞的前提下,盡可能利用網絡帶寬。帶寬夠、網絡好,我們就加快速度發送數據包,出現了延遲增大、丟包之后,就放慢發包的速度(因為繼續高速發包,可能會加劇網絡擁塞,反而發得更慢)。
視頻編碼的限制條件最初是解碼器的能力,碼率太高就會無法解碼,后來隨著 codec 的發展,解碼能力不再是瓶頸,限制條件變成了傳輸帶寬/文件大小,我們希望在控制數據量的前提下,畫面質量盡可能高。
一般編碼器都可以設置一個目標碼率,但編碼器的實際輸出碼率不會完全符合設置,因為在編碼過程中實際可以控制的并不是最終輸出的碼率,而是編碼過程中的一個量化參數(Quantization Parameter,QP),它和碼率并沒有固定的關系,而是取決于圖像內容。 這一點不在這里展開,感興趣的朋友可以閱讀視頻壓縮編碼和音頻壓縮編碼的基本原理。
無論是要發送的 TCP 數據包,還是要編碼的圖像,都可能出現“尖峰”,也就是短時間內出現較大的數據量。TCP 面對尖峰,可以選擇不為所動(尤其是網絡已經擁塞的時候),這沒有太大的問題,但如果視頻編碼也對尖峰不為所動,那圖像質量就會大打折扣了。如果有幾幀數據量特別大,但仍要把碼率控制在原來的水平,那勢必要損失更多的信息,因此圖像失真就會更嚴重。 這種情況通常的表現是畫面出現很多小方塊,看上去像是打了馬賽克一樣,導致畫面的局部或者整體看不清楚的情況
配置時指定目標碼率和碼率控制模式:
碼率控制模式有三種:
碼率控制模式在 MediaCodecInfo.EncoderCapabilities 類中定義了三種,在 framework 層有另一套名字和它們的值一一對應:
動態調整目標碼率:
Android 流控策略選擇
下面展示使用MediaExtractor獲取數據后,用MediaMuxer重新寫成一個MP4文件的簡單栗子
1. 多個 Interface 可以同時被一個類繼承的特性可以彌補 Java 單繼承的缺點,增強其可擴展性;
2. 定義公共接口和公共回調方法可以規范代碼;
抽象類:
含有abstract修飾符的class
即為抽象類,
abstract類不能創建實例對象,
含有abstract的方法的類必須定義為abstract
class
,
abstract
class
里的方法不必是抽象的,
抽象來中定義抽象方法必須放在具體子類中實現,所以,不能有抽象的構造方法或抽象的靜態方法,如果子類沒有實現抽象父類中的所有方法,那么,子類也必須定義為抽象類。
接口:
接口(interface)可以說成是抽象類的特例。接口中的所有方法都必須是抽象的,接口中的方法定義默認為public
abstract
。接口中的變量是全局常量,即public
static
final修飾的。
語法上的區別:
1,抽象類里可以有構造方法,而接口內不能有構造方法。
2,抽象類中可以有普通成員變量,而接口中不能有普通成員變量。
3,抽象類中可以包含非抽象的普通方法,而接口中所有的方法必須是抽象的,不能有非抽象的普通方法。
4,抽象類中的抽象方法的訪問類型可以是public
,protected和默認類型,但接口中的抽象方法只能是public類型的,并且默認即為public
abstract類型。
5,抽象類中可以包含靜態方法,接口內不能包含靜態方法。
6,抽象類和接口中都可以包含靜態成員變量,抽象類中的靜態成員變量的訪問類型可以任意,但接口中定義的變量只能是public
static類型,并且默認為public
static類型。
7,一個類可以實現多個接口,但只能繼承一個抽象類。
再補充點兩者在應用上的區別:
名稱欄目:android接口,Android接口
URL鏈接:http://www.2m8n56k.cn/article4/dsihcie.html
成都網站建設公司_創新互聯,為您提供軟件開發、搜索引擎優化、網站制作、動態網站、ChatGPT、企業網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯