何謂Intent
意圖, 消息傳遞機制,由某一主控權移交到另一個Activity, Service or Broadcast
Intent可作用於Activity, Service, Broadcast
在調用指定上,分顯性指定與隱性指定
顯性 : 明確指定那一個Activity, Service, Broadcast接手
隱性 : 不明確指定由誰接手
在行為上,分為獨立型及回調型
獨立型Intent
接收端不返回傳送端
顯性
Intent intent=new Intent();
intent.setClass(this, Benz.class);
startActivity(intent);
隱性
Intent intent=new Intent();
intent=Intent.createChooser(intent, “請選一個app”);
intent.setAction(“good.car”);
startActivity(intent);
AndroidManifest.xml需設定filter及activity
<activity android:name=”.Benz” >
<intent-filter>
<action android:name=”good.car”/>
<category android:name=”android.intent.category.DEFAULT” />
</intent-filter>
</activity>
Category : 將Activity註冊到Android 預設容器中
傳送端 | 接收端 |
intent.putExtra(“name”, “車車”); intent.putExtra(“price”, 100); |
Intent intent=getIntent();Bundle extra=getIntent().getExtras(); String str=extra.getString(“name”); int price=extra.getInt(“price”); |
Bundle extra=new Bundle(); extra.putString(“name”, “頭又大”); extra.putInt(“price”, 100); intent.putExtras(extra); |
同上 |
上述二者,本質都是一樣的
Bundle傳送物件時,需將物件implements Serializable
回調Intent
傳送端使用startActivityForResult(intent, requestCode)傳送
接收端使用setResult(requestCode, intent)返回
傳送端使用protected void onActivityResult(int requestCode, int resultCode, Intent intent)接收
傳送端 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); txt=(TextView)findViewById(R.id.textView); Intent intent=new Intent(); intent.putExtra("name", "BMW"); intent.putExtra("price", 100); intent.setAction("good.car"); startActivityForResult(intent, 1); } protected void onActivityResult(int requestCode, int resultCode, Intent intent){ txt.setText(String.valueOf(intent.getExtras().getInt("newPrice"))); } 接收端 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_benz); Intent intent=getIntent(); intent.putExtra(“newPrice”, 200);//新增資料 setResult(1, intent);//回傳資料 finish(); }
Intent應用
打電話
Permission : <uses-permission android:name=”android.permission.CALL_PHONE”/>
Uri uri=Uri.parse(“tel:”+電話);
Intent intent=new Intent(Intent.ACTION_CALL, uri);
startActivity(intent);
相機 :
相機畫素超過800M, 此例不能用,超出系統預設Ram大小
<uses-permission android:name=”android.permission.CAMERA” />
Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(sdPath + “/” + “photo1.png”)));
startActivityForResult(intent, 100);
文字分享
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT, “要分享的文字”);
intent.setType(“text/plain”);
startActivity(Intent.createChooser(intent, “請選擇瀏灠程式”));
圖片分享
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
intent.setType(“image/png”);
多筆資料分享
ArrayList<Uri>imgUris=new ArrayList<Uri>();
imgUris.add(imgUri1);
imgUris.add(imgUri2);
intent.setAction(Intent.ACTION_SEND);
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imgUris);
intent.setType(“image/*”);
Activity轉場動畫
在Activity跳轉的過程中,加入轉場動畫,可以加入ActivityOptions來達成
startActivity(intent,
ActivityOptions.makeSceneTransitionAnimation(
this, findViewById(v.getId()), v.getTag().toString())
.toBundle());
請注意,此SDK供在Android 5.0以上才有的新功能
接收圖片分享設定-BroadcastReceiver
成為接收圖片分享之設定
<intent-filter>
<action android:name=”android.intent.action.SEND” />
<category android:name=”android.intent.category.DEFAULT” />
<data android:mimeType=”image/*” />
</intent-filter>
Resource & i18n
限定符 & R.java, Resource values, drawable, layout, anim, menu, raw, HTML
Res為資源檔存放位置, 資源命名只能小寫
限定符 : 如res中,有drawable-mdpi, mdpi即為限定符,指中密度140-180dpi
查看裝置之destiny
cmd ->db shell ->cd /systemècat build.prop ->查看ro.sf.lcd_density=240,240即其destiny, 但不一定每個裝置都可以查得到,有時需看LCD技術文件
adb shell getprop ro.sf.lcd_density 亦可試試
i18n : 為因應不同國別語言, 可將字串分別以相同的變數名稱及字串置於res/value-xx中,如value-zh:中文,value-en:英文
R.java : 專案資源檔,res/xxx所部署的資源都會自動參照到R.java中,不建議手動更改此檔
android.R : 系統共用資源
values: 包含字串(string), 陣列(string-array), 顏色(color), 尺寸(dimens), 風格(theme)
drawable : 存放.jpg, png, gif
drawable-ldpi (120 dpi, Low density screen) – 36 x 36px
drawable-mdpi (160 dpi, Medium density screen) – 48 x 48px
drawable-hdpi (240 dpi, High density screen) – 72 x 72px
drawable-xhdpi (320 dpi, 720p) – 96 x 96px
drawable-xxhdpi (480 dpi, 1080p) – 144 x 144px
layout : UI佈局畫面 : 適屏相當複雜,需一個一個慢慢試
Layout-small : 直式420*320dp
Layout-large : 直式 640*480dp
Layout-xlarge : 直式 960/720dp
較新之計算
layout-sw600dp, layout-w720dp, layout-w1024dp
layout-h720dp, layout-h1024dp
anim : 支援補間動畫及影格動畫
menu : 功能選單
raw : 文字檔,mp3, mp4等