之前一篇文章囉哩八梭的講了一堆Intent, 這次來看個實例
拿Pluroid的open source - Pluroium來當作實驗對象, 這次要實驗的是如何替它的compose畫面提昇一個簡單而彈性的功能, 先來看一下畫面:
<Button android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="Attach" android:onClick="handleAttachment"></Button>
在Button01定義的onClick是handleAttachement, 所以我們在ComposeActivity上加上
public void handleAttachment(View target) {Intent intent = new Intent("org.pluroid.pluroium.COMPOSE_PLUGIN");startActivityForResult(Intent.createChooser(intent, "Choose a plugin"), RESULT_COMPOSE_PLUGIN);}
- org.pluroid.pluroium.COMPOSE_PLUGIN 這是用來呼叫plugin的action
- startActivityForResult 這跟startActivity的不同點是, 當它呼叫的Activity結束時, 它可以接收到它呼叫的Activity的結果
- createChooser 這算是個utility method, 它幫你包裝了一些東西, 在這邊搭配startActivity使用的話, 如果有多個Activity支援COMPOSE_PLUGIN, 那麼當按下Attach後就會先跳出一個標題是"Choose a plugin"的視窗列出所有支援這intent的Activities讓User選擇(如果只有一個Activity, 就不會出現這視窗
- RESULT_COMPOSE_PLUGIN 這是一個數字, request code, 當callee activity結束後, 要靠這個讓caller activity知道它剛剛是處理哪種
Activity還需要overwrite一個onActivityResult, 範例如下
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == RESULT_COMPOSE_PLUGIN && resultCode == RESULT_OK) {
String text = data.getStringExtra(Intent.EXTRA_TEXT);
plurkContent.append(" ");
plurkContent.append(text);
return;
}
super.onActivityResult(requestCode, resultCode, data);
}
PackageManager pm = this.getPackageManager();
Intent intent = new Intent("org.pluroid.pluroium.COMPOSE_PLUGIN");
Listativities = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
if(ativities.size() == 0) //No activity found for "org.pluroid.pluroium.COMPOSE_PLUGIN"
findViewById(R.id.Button01).setEnabled(false);
public void doOK(View target) {
Intent data = new Intent();
data.putExtra(Intent.EXTRA_TEXT, "Hello Pluroium");
setResult(RESULT_OK, data);
finish();
}
public void doCancel(View target) {
setResult(RESULT_CANCELED);
finish();
}
----------------------------------
沒有留言:
張貼留言