Intent

      在〈Intent〉中尚無留言

何謂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等

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *