上篇文章地址:

C#開發(fā)移動(dòng)應(yīng)用系列(1.環(huán)境搭建)

C#開發(fā)移動(dòng)應(yīng)用系列(2.使用WebView搭建WebApp應(yīng)用)

C#開發(fā)移動(dòng)應(yīng)用系列(3.使用照相機(jī)掃描二維碼+各種基礎(chǔ)知識(shí))

 

寫完這篇..本系列基本也就結(jié)束了.

看完這些,基本做個(gè)Webapp應(yīng)該是毫無問題的了..其實(shí)略微有點(diǎn)傷感,Xamarin確實(shí)是好東西..

奈何,生不逢時(shí)..等完善了. 開源了..社區(qū)化了..APP應(yīng)用(指的是安裝包類客戶端)已經(jīng)逐漸沒落了..

算了,話不多說.開始正文

 

確定一下本篇的學(xué)習(xí)目標(biāo):

1.學(xué)會(huì)調(diào)用各類系統(tǒng)應(yīng)用

2.學(xué)會(huì)調(diào)用相冊(cè)并取得選擇的照片

3.學(xué)會(huì)被調(diào)用(嗯..就是讓別人調(diào)用你..)..

 效果圖:

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn)iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn)

正文

1.學(xué)會(huì)調(diào)用各類系統(tǒng)應(yīng)用

我們都知道,安卓有很多系統(tǒng)自帶的應(yīng)用..比如,打電話.發(fā)短信,相冊(cè),地圖.Email.等等..

今天我們就來一個(gè)個(gè)的調(diào)用,并傳值.

首先我們還是添加一個(gè)按鈕,來測(cè)試調(diào)用第三方的應(yīng)用.

如圖:iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn)

然后,我們編寫這個(gè)按鈕的點(diǎn)擊事件:

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn)

 protected override void OnCreate(Bundle bundle)
  { //獲取按鈕
  var btn3 = FindViewById<Button>(Resource.Id.button3);  //添加點(diǎn)擊事件
  btn3.Click += delegate
   {      //do...    }
}

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn)

準(zhǔn)備工作搞定,我們來編寫相關(guān)調(diào)用代碼,來調(diào)用系統(tǒng)應(yīng)用

1.1調(diào)用電話

Android.Net.Uri uri = Android.Net.Uri.Parse(=

代碼很簡(jiǎn)單..就三句話.. tel后面調(diào)用你想撥打的電話.

1.2調(diào)用短信

                    // 發(fā)送短信
                    Android.Net.Uri uri = Android.Net.Uri.Parse("smsto:10010");
                    Intent it = new Intent(Intent.ActionSendto, uri);
                    it.PutExtra("sms_body", "你妹妹,我沒欠費(fèi) 你給我停機(jī)!");
                    StartActivity(it);

嗯..你妹妹是你要發(fā)的短信..  smsto后面是你要發(fā)送給誰..

1.3調(diào)用地圖

 Android.Net.Uri uri = Android.Net.Uri.Parse("geo:38.899533,-77.036476");
 Intent it = new Intent(Intent.ActionView, uri);
 StartActivity(it);

geo后面給坐標(biāo)

1.4調(diào)用Email

Android.Net.Uri uri = Android.Net.Uri.Parse("mailto:777@qq.com?cc=aa@qq.com&subject=標(biāo)題&body=內(nèi)容");var intent = new Intent(Intent.ActionView,uri);
 StartActivity(intent);

1.5調(diào)用通訊錄

 

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn)

//第一種(建議使用第一種)
 Android.Net.Uri uri = Android.Net.Uri.Parse("content://contacts/people");
Intent it = new Intent(Intent.ActionPick, uri);
StartActivityForResult(it, 11);//第二種 Intent i = new Intent();
 i.SetAction(Intent.ActionGetContent);
 i.SetType("vnd.android.cursor.item/phone");
 StartActivityForResult(i, 11);

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn)

1.6.(暫時(shí)就這些..沒了 哈哈哈)

我們進(jìn)入下個(gè)環(huán)節(jié)..

 

 

2.學(xué)會(huì)調(diào)用相冊(cè)并取得選擇的照片

同樣,我們?cè)邳c(diǎn)擊事件中,修改代碼如下:

                    Intent i = new Intent();
                    i.SetType("image/*");
                    i.SetAction(Intent.ActionPick);
                    StartActivityForResult(i,11);

細(xì)心的朋友已經(jīng)發(fā)現(xiàn)了..在1.4之前我們最后一句,都是StartActivity來打開應(yīng)用的,1.5我們則用到了StartActivityForResult

大家一看方法名就很明白了..這個(gè)是打開應(yīng)用之后,應(yīng)用會(huì)給你返回值的打開方式.

那么,我們?nèi)绾潍@得返回值呢?,其實(shí)前面一篇已經(jīng)提到過了..我們的OnActivityResult方法,就是獲取返回值的.

所以我們編寫代碼如下:

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn)

        protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
        {            //base.OnActivityResult(requestCode, resultCode, data);            //如果當(dāng)初的發(fā)的requestCode =1
            if (requestCode == 1 && resultCode == Result.Ok)
            { 
               
                webView.LoadUrl(data.GetStringExtra("code"));
                Toast.MakeText(this, "掃描結(jié)果:" + data.GetStringExtra("code"), ToastLength.Short).Show();
            }            if(requestCode == 11 && resultCode == Result.Ok)
            {               //獲得返回值
                Android.Net.Uri uri = data.Data;               //轉(zhuǎn)換返回值,得到文件地址
                var sdCardPath = Android.OS.Environment.ExternalStorageDirectory.AbsolutePath;                var filePath = System.IO.Path.Combine(sdCardPath, data.DataString);
                ContentResolver resolver = this.ContentResolver;                string[] pojo = { MediaStore.Images.Media.InterfaceConsts.Data };                var cursor = this.ContentResolver.Query(uri, pojo, null, null, null);                int column_index = cursor.GetColumnIndex(MediaStore.Images.Media.InterfaceConsts.Data);
                cursor.MoveToFirst();                var path = cursor.GetString(column_index);                //通過文件地址獲得文件流
                FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read);
                BinaryReader r = new BinaryReader(fs);
                r.BaseStream.Seek(0, SeekOrigin.Begin);    //將文件指針設(shè)置到文件開
                byte[] pReadByte = r.ReadBytes((int)r.BaseStream.Length);
                ShowMessage("讀取到文件,字節(jié)長度:" + pReadByte.Length);
            }
        }

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn)

獲取照片的步驟分為3步.

1.獲取返回的值.(這是一個(gè)路徑,但是不能直接拿來用)

2.將返回值轉(zhuǎn)換成我們想要的文件路徑(重點(diǎn)~直接復(fù)制我代碼就好了..)

3.通過文件流讀取文件,并得到字節(jié)(和.NET的IO操作一模一樣)

 

這樣,我們就完成了整個(gè)讀取照片的過程..

 

3.學(xué)會(huì)被調(diào)用(嗯..就是讓別人調(diào)用你..)..

嗯..這里也許會(huì)比較難理解..

我們舉個(gè)栗子,大家都用windows系統(tǒng), 壓縮包肯定都知道..那打開壓縮包..其實(shí)有很多軟件.. rar  zip 7z什么的..我們有的時(shí)候安裝多了..就會(huì)要選擇一個(gè)默認(rèn)的軟件打開..

安卓里面也是一樣,比如你碰到一個(gè)txt文件,你的APP不支持打開..那么就要選擇一個(gè)第三方的打開,正好你寫的APP是可以打開TXT的..所以 你要告訴別人,我可以打開..選我,.選我..

類似這樣 - - ,不知道講清楚沒有..

我們上代碼吧..

我們首先新建一個(gè)APP項(xiàng)目如下:

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn)

然后在MainActivity編寫意圖過濾特性,如下:

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn)

這里兩個(gè)屬性的意思是:Intent.ActionSend當(dāng)用戶的意圖是發(fā)送操作的時(shí)候,類別設(shè)置為默認(rèn)

這樣我們就稍微過濾了一下意圖..

然后,我們把這個(gè)APP部署在模擬器上,如圖:

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn)

 

然后我們編寫原來的點(diǎn)擊事件,來調(diào)用這個(gè)APP,代碼如下:

 // 打開發(fā)送屬性的應(yīng)用
 var ite = new Intent(Intent.ActionSend);
 ite.PutExtra(Intent.ExtraText, "發(fā)送數(shù)據(jù):XXXXX");
 StartActivity(Intent.CreateChooser(ite, "選擇應(yīng)用程序"));

我們點(diǎn)擊按鈕,就會(huì)調(diào)用到APP3,如圖:

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn)

 

上圖中,我的APP3已經(jīng)獲取到WebApp測(cè)試發(fā)過來的數(shù)據(jù).,所以下面,我們講如何得到其他應(yīng)用發(fā)過來的數(shù)據(jù):

App3中的代碼如下:

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn)

if (Intent.ActionSend == action)
 {                //得到發(fā)過來的數(shù)據(jù)
                var sendtext = this.Intent.Extras.GetString(Intent.ExtraText);                //彈出顯示
                Toast.MakeText(this, sendtext, ToastLength.Long).Show();                //顯示到文本控件
                var textview = FindViewById<TextView>(Resource.Id.textView1);
                textview.Text = sendtext;
 }

iOS培訓(xùn),Swift培訓(xùn),蘋果開發(fā)培訓(xùn),移動(dòng)開發(fā)培訓(xùn)

 

好了,至此,我們整個(gè)C#開發(fā)移動(dòng)應(yīng)用系列就結(jié)束了..謝謝大家的支持

 

 

 

最后說一句

其實(shí),幾篇博文下來,大家可以發(fā)現(xiàn),我們的Xamarin已經(jīng)是相當(dāng)?shù)某墒炝?.代碼也沒什么難度,無非就是多理解一種新應(yīng)用的跳轉(zhuǎn),打開和相關(guān)概念..

嗯..本系列到此結(jié)束..下面開始研究Asp.net core了..

作者:顧振印 出處:http://www.cnblogs.com/GuZhenYin/ 如果您覺得閱讀本文對(duì)您有幫助,請(qǐng)點(diǎn)一下“推薦”按鈕,您的“推薦”將是我最大的寫作動(dòng)力!本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面

http://www.cnblogs.com/GuZhenYin/p/7127529.html