在Android開發(fā)過程中,我們常常需要借助手機上的其他應用來幫助我們實現(xiàn)一些功能,這時就需要使用隱式Intent垮卓,他的原理是設置Action师幕、Data、Category灭将,讓系統(tǒng)來篩選出合適的Activity后控。
但如果一個功能有多個應用可以實現(xiàn)的話浩淘,比如選擇圖片的功能,可以直接從相冊或手機內(nèi)部存儲設備中選擇圖片砂蔽,也可以調用相機進行拍照署惯。
1.從相冊或手機內(nèi)部存儲設備中選擇圖片(如果有多個應用的activity的intent過濾規(guī)則與之匹配,則會拉起系統(tǒng)的chooserActivity讓用戶進行選擇):
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
startActivity(i);
從相冊或手機存儲選擇圖片.png
2.調用相機進行拍照(若只有一個activity與之匹配安岂,則直接拉起該activity)
Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivity(i);
拉起相機進行拍照.png
但這是兩個不同的intent嗜闻,有沒有一種方法能讓兩個intent過濾的應用同時顯示呢?答案是肯定的桅锄。
首先需要創(chuàng)建一個action為Intent.ACTION_CHOOSER的Intent琉雳,之后調用putExtra方法,分別傳入putExtra(Intent.EXTRA_INTENT, i)和putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[]{i1, i2, i3......});
這時友瘤,系統(tǒng)就會展示所有能夠匹配i翠肘,i1,i2辫秧,i3...的應用了束倍。
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.addCategory(Intent.CATEGORY_OPENABLE);
i.setType("image/*");
Intent i2 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
chooserIntent.putExtra(Intent.EXTRA_INTENT, i);
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[]{i2});
startActivity(chooserIntent);
選擇相冊或相機拍照.png