310 likes | 482 Views
8-3 ネットワーク関連 1.メールの送信. 暗黙的インテントでメーラを起動 mailto:< メールアドレス> をインテントで渡してアプリを起動。. B. プログラム例(その1). package jp.mail; import android.app.*; import android.os.*; import android.content.Intent; import android.net.Uri; import android.view.*; import android.view.View.*; import android.webkit.*;
E N D
8-3 ネットワーク関連1.メールの送信 暗黙的インテントでメーラを起動 mailto:<メールアドレス> をインテントで渡してアプリを起動。
B.プログラム例(その1) package jp.mail; import android.app.*; import android.os.*; import android.content.Intent; import android.net.Uri; import android.view.*; import android.view.View.*; import android.webkit.*; import android.widget.*; import android.media.*; public class MailActivity extends Activity { Button button; TextView[] textV=new TextView[3]; EditText[] editT=new EditText[3];
プログラム例(その2) /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { int i; super.onCreate(savedInstanceState); TableLayout TL=new TableLayout(this); setContentView(TL); button=new Button(this);button.setText("送信"); for(i=0;i<textV.length;i++) textV[i]=new TextView(this); for(i=0;i<editT.length;i++) textV[i]=new TextView(this); textV[0].setText("宛先"); textV[1].setText("表題"); textV[2].setText("本文"); for(i=0; i<textV.length;i++)TL.addView(textV[i]); for(i=0; i<editT.length;i++)TL.addView(editT[i]); TL.addView(button); button.setOnClickListener(new mailClickListener()); }
B.プログラム例(その3) class mailClickListener implements OnClickListener{ public void onClick(View v){ Intent intent=new Intent(); intent.setAction(Intent.ACTION_SENDTO); intent.setData(Uri.parse("mailto:"+ editT[0].getText().toString())); intent.putExtra(Intent.EXTRA_SUBJECT, editT[1].getText().toString()); intent.putExtra(Intent.EXTRA_TEXT, editT[2].getText()); startActivity(intent); } } }
2.Webページの表示A. パーミッションの指定 【AndroidManifest.xml】 ・・・ </application> <uses-permission android.name="android.permission.INTERNET" /> </manifest>
B.プログラム例(その1) package jp.web; import android.app.*; import android.os.*; import android.view.*; import android.view.View.*; import android.webkit.*; import android.widget.*; public class WebActivity extends Activity { Button[] button=new Button[4]; WebView webV; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { int i; super.onCreate(savedInstanceState); TableLayout TL=new TableLayout(this); setContentView(TL);
プログラム例(その2) webV=new WebView(this); webV.setWebViewClient(new WebViewClient()); webV.loadUrl("http://souzousha.iinaa.net"); TableRow tableR=new TableRow(this); for(i=0;i<button.length;i++){ button[i]=new Button(this); tableR.addView(button[i]); } button[0].setText("←"); button[1].setText("→"); button[2].setText("+"); button[3].setText("‐"); for(i=0;i<button.length;i++) button[i].setOnClickListener(new webClickListener()); TL.addView(tableR); TL.addView(webV); }
プログラム例(その3) class webClickListener implements OnClickListener{ public void onClick(View v){ if(v==button[0]){ if(webV.canGoBack())webV.goBack(); } else if(v==button[1]){ if(webV.canGoForward())webV.goForward(); } else if(v==button[2])webV.zoomIn(); else if(v==button[3])webV.zoomOut(); } } }
C.実行例 指定されたWebページ
3. 訪問Webの記録A.マニフェストに追加3. 訪問Webの記録A.マニフェストに追加 【AndroidManifest.xmlへの追加】 … </activity> <activity android:name=".Rss" android:label="@string/app_name">" </activity> </application> <uses-permission android:name= "android.permission.INTERNET" /> </manifest>
RSS収集のときに便利なので,RSSとは…RSS収集のときに便利なので,RSSとは… ニュースやブログなど,各種のウェブサイトの更新情報をまとめて配信するための文書フォーマットの総称。以下の規格がある。 ① RDF site summary(RSS 0.9, RSS 1.0) ② rich site summary(RSS 0.91) ③ really simple syndication(RSS 2.0)
B.プログラム例RssActivity クラス(その1) package jp.rss; import java.io.*; import android.app.*; import android.os.*; import android.content.*; import android.view.*; import android.view.View.*; import android.widget.*; import android.webkit.*; import android.widget.AdapterView.*; public class RssActivity extends Activity { public static int RSS_ACT=1; Button[] button=new Button[4]; WebView webV;
RssActivity クラス(その2) /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { int i; super.onCreate(savedInstanceState); TableLayout TL=new TableLayout(this); setContentView(TL); webV=new WebView(this); webV.setWebViewClient(new WebViewClient()); webV.loadUrl("http://souzousha.iinaa.net"); TableRow tableR=new TableRow(this); for(i=0; i<button.length;i++){ button[i]=new Button(this); tableR.addView(button[i]); }
RssActivity クラス(その3) button[0].setText("←"); button[1].setText("→"); button[2].setText("URL取出"); button[3].setText("URL表示"); for(i=0;i<button.length;i++) button[i].setOnClickListener(new rssActClickListener()); TL.addView(tableR); TL.addView(webV); }
RssActivity クラス(その4) class rssActClickListener implements OnClickListener{ public void onClick(View v){ if(v==button[0]){ if(webV.canGoBack())webV.goBack(); }else if(v==button[1]){ if(webV.canGoForward())webV.goForward(); }else if(v==button[2]){ try{ FileOutputStream fout= openFileOutput("SampleRSS.txt",Context.MODE_APPEND); BufferedWriter buff = new BufferedWriter(new OutputStreamWriter(fout)); buff.write(webV.getUrl() + "\n"); buff.flush(); fout.close(); }catch(Exception e){}
RssActivity クラス(その5) }else if(v==button[3]){ Intent intent=new Intent(getApplicationContext(),Rss.class); startActivityForResult(intent,RSS_ACT); } } } public void onActivityResult(int reqcode, int result, Intent intent){ if(reqcode==RSS_ACT && result==RESULT_OK){ String r =intent.getStringExtra("URL"); webV.loadUrl(r); } } }
Rss クラス(その1) package jp.rss; import java.io.*; import java.util.*; import android.app.*; import android.os.*; import android.content.*; import android.view.*; import android.widget.*; import android.widget.AdapterView.*; public class Rss extends Activity { public static int RSS_ACT=1; ListView listV;Intent intent; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout LL=new LinearLayout(this); setContentView(LL);
Rss クラス(その2) intent = getIntent(); listV=new ListView(this); ArrayList<String> list=new ArrayList<String>(); try{ FileInputStream finput=openFileInput("SampleRSS.txt"); BufferedReader buff= new BufferedReader(new InputStreamReader(finput)); String str; while((str=buff.readLine())!=null) list.add(str); }catch(Exception e){}; ArrayAdapter<String> adapter = new ArrayAdapter<String> (this, android.R.layout.simple_list_item_1,list); listV.setAdapter(adapter); LL.addView(listV); listV.setOnItemClickListener(new rssItemClickListener()); }
Rss クラス(その3) class rssItemClickListener implements OnItemClickListener{ public void onItemClick(AdapterView<?> av, View v, int pos, long id){ TextView temp=(TextView) v; String str=(String) temp.getText(); intent.putExtra("URL",str); setResult(RESULT_OK,intent); finish(); } } }
D.実行例 【指定されたWebの表示】
4.RSSをXMLとして扱うA.マニフェストに追加 【AndroidManifest.xmlへの追加】 … </application> <uses-permission android:name= "android.permission.INTERNET" /> </manifest>
B.関連クラス(その1) クラス 説明 org.apache.http.client.HttpClient インターフェース HttpResponse execute(HttpUriRequest r) リクエストからレスポンスを取得 org.apache.http.DefaultHttpClient クラス DefaultHttpClient() HTTPクライアントを作成 org.apache.http.HttpGet クラス HttpGet() GETリクエストを作成 org.apache.http.HttpResponse インターフェース HttpEntity getEntity() エンティティを取得 org.apache.http.HttpEntity インターフェース InputStream getContent() コンテンツを取得
関連クラス(その2) クラス 説明 org.xmlpull.v1.XmlPullParserFactory クラス static XmlPullParserFactory newinstance() XMLパーサファクトリを取得 XmlPullParser newPullParser() XMLパーサを取得 org.xmlpull.v1.XmlPullParser インターフェース void setInput(StreamReader s) 入力ストリームから読み込む int getEventType() イベントタイプを取得 String nextText() 次のテキストを取得 int next() 次に進む
C.イベントタイプ(XmlPullPaser クラス) タイプ 説明 START_DOCUMENT 文書の開始 END_DOCUMENT 文書の終了 START_TAG タグの開始 END_TAG タグの終了 TEXT テキスト
D.プログラム例(その1) package jp.web; import java.io.*; import java.net.*; import java.util.*; import org.apache.http.*; import org.apache.http.client.*; import org.apache.http.client.methods.*; import org.apache.http.impl.client.*; import org.xmlpull.v1.*; import android.app.*; import android.os.*; import android.view.*; import android.view.View.*; import android.widget.*;
(その2) public class WebActivity extends Activity { EditText editT; Button button; ListView listV; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout LL =new LinearLayout(this); LL.setOrientation(LinearLayout.VERTICAL); setContentView(LL); editT=new EditText(this); button=new Button(this); button.setText("読込"); listV=new ListView(this); LL.addView(editT); LL.addView(button); LL.addView(listV); button.setOnClickListener(new webClickListener()); }
(その3) class webClickListener implements OnClickListener{ public void onClick(View v){ try{ ArrayList<Map<String,String>> list = new ArrayList<Map<String,String>>(); // ① HTTPクライアントの作成 HttpClient hClient = new DefaultHttpClient(); HttpGet hGet = new HttpGet(); // ② URIを設定 String uri = editT.getText().toString(); hGet.setURI(new URI(uri)); // ③ レスポンスを取得 HttpResponse hResp = hClient.execute(hGet); // ④ XMLの内容を取得 InputStream inputS = hResp.getEntity().getContent(); BufferedReader buff = new BufferedReader(new InputStreamReader(inputS));
(その3) // ⑤ XMLパーサを取得 XmlPullParserFactory xpf = XmlPullParserFactory.newInstance(); XmlPullParser xpp = xpf.newPullParser(); // ⑥ XMLを入力 xpp.setInput(buff); // ⑦ 入力開始の初期処理 int type = 0; type = xpp.getEventType(); HashMap<String,String> hMap = null; String title = "" ; String description = "" ; boolean isItem = false ;
(その4) // ⑧ 各開始タグごとの処理 while(type !=XmlPullParser.END_DOCUMENT){ if(type == XmlPullParser.START_TAG){ if(xpp.getName().equals("item")){ hMap=new HashMap<String,String>(); isItem=true; }else if(xpp.getName().equals("title")){ if(isItem){ title=xpp.nextText(); hMap.put("title", title); } }else if(xpp.getName().equals("description")){ if(isItem){ description = xpp.nextText(); hMap.put("description", description); } } }else if(type == XmlPullParser.END_TAG){ list.add(hMap); isItem = false; } type = xpp.next(); }
(その5) String[] keys ={"title","description"}; int[] idS ={android.R.id.text1, android.R.id.text2}; SimpleAdapter ad = new SimpleAdapter (getApplicationContext(), list, android.R.layout.simple_list_item_2, keys, idS); listV.setAdapter(ad); }catch(Exception e){ Toast.makeText(getBaseContext(), "URLを確認してください", Toast.LENGTH_LONG).show(); } } } }
E.実行例 【指定されたWebの表示】 ①URL入力 ②「読込」ボタンを押す ④スクロール ③消して…