編輯:關於Android編程
就像你的應用程序能夠把數據發送給其他應用程序一樣,它也可以很容易的接收來自其他應用程序的數據。在接收來自其他應用程序的數據時,需要考慮用戶如何跟你的應用程序進行交互,以及你的應用程序想要接收的數據類型。例如,一個社交網絡應用程序應該對接收文本內容感興趣,如感興趣的來自另外一個應用程序的Web網址(URL)。Android的Google+應用程序會接收文本和圖片(一張或多張)。使用這個應用程序,用戶可以輕松的啟動Google+來發送來自Android圖庫應用中的圖片。
更新你的清單
Intent過濾器會通知系統,一個應用程序組件會接收什麼樣的Intent對象。在清單文件中,使用<intent-filter>元素定義一個Intent過濾器。例如,如果你的應用程序要處理接收的文本、任意類型的圖片(一張或多張),你應該像下面這樣定義清單文件:
<activityandroid:name=".ui.MyActivity">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SEND_MULTIPLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="image/*" />
</intent-filter>
</activity>
注意:有關Intent過濾器和Intent解析的更多信息請看Intent和Intent過濾器
當另外一個應用程序通過構造一個Intent對象,並把它傳遞給startActivity()來共享這些東西時,你的應用程序就會作為一個列表項被列在Intent選擇器中。如果用戶選擇了你的應用程序,對應的Activity(上例中的.ui.MyActivity)就被啟動。然後你就可以在你的代碼和UI中處理相應的內容了。
處理輸入的內容
要處理由Intent對象所發送的內容,就要從調用getIntent()方法來獲得Intent對象開始。一旦你獲得了這個對象,就可以檢查它的內容來判斷下一步的工作。要記住,如果被啟動的Activity是來自系統的其他部分,如Launcher,那麼在檢查Intent對象時,需要對此加以考慮。
void onCreate (Bundle savedInstanceState){
...
// Get intent, action and MIME type
Intent intent = getIntent();
String action = intent.getAction();
String type = intent.getType();
if (Intent.ACTION_SEND.equals(action) && type != null) {
if ("text/plain".equals(type)) {
handleSendText(intent); // Handle text being sent
} else if (type.startsWith("image/")) {
handleSendImage(intent); // Handle single image being sent
}
} else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) {
if (type.startsWith("image/")) {
handleSendMultipleImages(intent); // Handle multiple images being sent
}
} else {
// Handle other intents, such as being started from the home screen
}
...
}
void handleSendText(Intent intent) {
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
if (sharedText != null) {
// Update UI to reflect text being shared
}
}
void handleSendImage(Intent intent) {
Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM);
if (imageUri != null) {
// Update UI to reflect image being shared
}
}
void handleSendMultipleImages(Intent intent) {
ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM);
if (imageUris != null) {
// Update UI to reflect multiple images being shared
}
}
警告:要額外仔細的檢查輸入的數據,因為你不知道其他的應用程序會給你發送什麼內容。例如,MIME類型可能被錯誤的設置,或者被發送的圖片可能超大。還要記住的時,二進制的數據要在獨立的線程中處理,而不是在主線程(UI)中。
更新UI可以像填寫EditText控件一樣簡單,或者是應用與復雜的感興趣的圖片過濾。
折騰了好多天,遇到 N 多讓人崩潰無語的問題,不過今天終於有些收獲了,這是實驗的第一版,有些混亂,下一步進行改造細分,先把代碼記錄在這兒吧。 網上查了很多資料,發現都千篇
Intent 是 Android 程序中各組件之間進行交互的一種重要方式,它不僅可以指明當前組件想要執行的動作,還可以在不同組件之間傳遞數據。Intent 一般可被用於啟
public class DragGrid extends GridView { /** 點擊時候的X位置 */ public int downX; /
Android消息提示類viewbadger ,效果如下: 代碼如下 BadgeView.java import android.content.Context