Share Button
Hướng người dùng đến ứng dụng khác
02
February
2014

Một trong những tính năng quan trọng nhất của Android là khả năng của một ứng dụng để gửi người dùng đến một ứng dụng dựa trên một “hành động” nó muốn thực hiện. Ví dụ, nếu ứng dụng của bạn có địa chỉ của một doanh nghiệp mà bạn muốn hiển thị trên bản đồ, bạn không cần phải xây dựng một hoạt động trong ứng dụng của bạn cho thấy một bản đồ. Thay vào đó, bạn có thể tạo một yêu cầu để xem địa chỉ sử dụng một ý định . Hệ thống Android sau đó bắt đầu một ứng dụng đó là có thể hiển thị địa chỉ trên bản đồ

Như đã giải thích trong lớp học đầu tiên, xây dựng ứng dụng đầu tiên của bạn , bạn phải sử dụng các ý định đến điều hướng giữa các hoạt động trong ứng dụng của riêng bạn. Bạn thường làm như vậy với một mục đích rõ ràng , trong đó xác định tên lớp chính xác của các thành phần bạn muốn bắt đầu. Tuy nhiên, khi bạn muốn có một ứng dụng riêng biệt thực hiện một hành động, chẳng hạn như “xem một bản đồ,” bạn phải sử dụng một ý định ngầm .

Hôm trung tâm đào tạo khóa hoc lap trinh android da nang sẽ chia sẽ đến các bạn bài học này cho bạn thấy làm thế nào để tạo ra một ý định ngầm cho một hành động cụ thể, và làm thế nào để sử dụng nó để bắt đầu một hoạt động thực hiện các hành động trong ứng dụng khác.

Ý định xây dựng một ngầm

Ý định ngầm không khai báo tên lớp của các thành phần để bắt đầu, nhưng thay vì khai báo một hành động để thực hiện. Các hành động xác định điều bạn muốn làm, chẳng hạn như xem , chỉnh sửa , gửi , hoặc có được một cái gì đó. Ý định thường cũng bao gồm dữ liệu liên quan đến hành động, chẳng hạn như địa chỉ mà bạn muốn xem, hoặc email bạn muốn gửi. Tùy thuộc vào mục đích bạn muốn tạo ra, các dữ liệu có thể là một Uri , một trong những loại dữ liệu khác, hoặc mục đích có thể không cần dữ liệu ở tất cả.

Nếu dữ liệu của bạn là một Uri , có một đơn giản Intent () constructor bạn có thể sử dụng xác định các hành động và dữ liệu.

Ví dụ, đây là cách để tạo ra một ý định thực hiện cuộc gọi điện thoại bằng cách sử dụng Uri dữ liệu để xác định số điện thoại:

Uri number = Uri.parse("tel:5551234");
Intent callIntent = new Intent(Intent.ACTION_DIAL, number);

Khi ứng dụng của bạn gọi ý định này bằng cách gọi startActivity () , các ứng dụng điện thoại khởi tạo một cuộc gọi đến các số điện thoại nhất định.

Dưới đây là một vài ý định khác và hành động của họ và Uri cặp dữ liệu:

Xem bản đồ:

// Map point based on address
Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
// Or map point based on latitude/longitude
// Uri location = Uri.parse("geo:37.422219,-122.08364?z=14"); // z param is zoom level
Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);

Xem một trang web:
Uri webpage = Uri.parse("http://www.android.com");
Intent webIntent = new Intent(Intent.ACTION_VIEW, webpage);

 

Loại ý định ngầm đòi hỏi dữ liệu “thêm” mà cung cấp các loại dữ liệu khác nhau, chẳng hạn như một chuỗi. Bạn có thể thêm một hoặc nhiều phần dữ liệu thêm bằng cách sử dụng khác nhau () putExtra phương pháp.

Theo mặc định, hệ thống sẽ xác định định dạng MIME thích hợp theo yêu cầu của một ý định dựa trên Uri dữ liệu đó là bao gồm. Nếu bạn không bao gồm một Uri trong ý định, bạn thường nên sử dụng setType () để xác định loại dữ liệu liên quan đến mục đích. Thiết lập các định dạng MIME quy định cụ thể hơn nữa mà các loại hoạt động sẽ nhận được các ý định.

Đây là một số ý định hơn mà thêm dữ liệu bổ sung để xác định hành động mong muốn:

Gửi một email với một tập tin đính kèm:

Intent emailIntent = new Intent(Intent.ACTION_SEND);
// The intent does not have a URI, so declare the "text/plain" MIME type
emailIntent.setType(HTTP.PLAIN_TEXT_TYPE);
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"jon@example.com"}); // recipients
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Email subject");
emailIntent.putExtra(Intent.EXTRA_TEXT, "Email message text");
emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://path/to/email/attachment"));
// You can also attach multiple items by passing an ArrayList of Uris

Tạo ra một sự kiện lịch:

Intent calendarIntent = new Intent(Intent.ACTION_INSERT, Events.CONTENT_URI);
Calendar beginTime = Calendar.getInstance().set(2012, 0, 19, 7, 30);
Calendar endTime = Calendar.getInstance().set(2012, 0, 19, 10, 30);
calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis());
calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis());
calendarIntent.putExtra(Events.TITLE, "Ninja class");
calendarIntent.putExtra(Events.EVENT_LOCATION, "Secret dojo");

Lưu ý: ý định này cho một sự kiện lịch chỉ được hỗ trợ với API cấp 14 và cao hơn.

Và cái lưu ý thứ 2 mà trung tâm đào tạo khóa hoc lap trinh di dong da nang đó là: Điều quan trọng là bạn xác định của bạn Ý định là như cụ thể càng tốt. Ví dụ, nếu bạn muốn hiển thị một hình ảnh bằng cách sử dụng ACTION_VIEW ý định, bạn nên xác định một kiểu MIME của hình ảnh / * . Điều này ngăn cản các ứng dụng có thể “xem” các loại dữ liệu (giống như một ứng dụng bản đồ) bị kích hoạt bởi các ý định.

Xác minh Có một ứng dụng để nhận mục đích?
Mặc dù nền tảng Android đảm bảo rằng ý định nhất định sẽ giải quyết cho một trong các ứng dụng được xây dựng trong (như điện thoại, email, hoặc Lịch ứng dụng), bạn nên luôn luôn bao gồm một bước xác minh trước khi gọi một ý định.

Chú ý: Nếu bạn gọi một ý định và không có ứng dụng có sẵn trên thiết bị có thể xử lý các ý định, ứng dụng của bạn sẽ sụp đổ.
Để xác minh có một hoạt động có sẵn màgui-nguoi-dung-den-ung-dung-khac có thể đáp ứng mục đích, gọi queryIntentActivities () để có được một danh sách các hoạt động có khả năng xử lý của bạn Intent. Nếu trở về List là không có sản phẩm nào, bạn có thể an toàn sử dụng mục đích. Ví dụ:

PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0);
boolean isIntentSafe = activities.size() > 0;

Nếu isIntentSafe là true , thì ít nhất một ứng dụng sẽ đáp ứng mục đích. Nếu nó là sai , sau đó không có bất kỳ ứng dụng để xử lý các ý định.
Lưu ý: Bạn nên thực hiện việc kiểm tra này khi hoạt động của bạn đầu tiên bắt đầu trong trường hợp bạn cần phải vô hiệu hóa các tính năng sử dụng mục đích trước khi người dùng cố gắng sử dụng nó. Nếu bạn biết về một ứng dụng cụ thể mà có thể xử lý các ý định, bạn cũng có thể cung cấp một liên kết cho người dùng tải về các ứng dụng (xem làm thế nào để liên kết đến sản phẩm của bạn trên Google Play ).

Bắt đầu một hoạt động với mục đích?
Một khi bạn đã tạo ra của bạn Ý định và thiết lập các thông tin thêm, xin gọi startActivity () để gửi nó vào hệ thống. Nếu hệ thống xác định nhiều hơn một hoạt động có thể xử lý các ý định, nó sẽ hiển thị một hộp thoại cho người dùng lựa chọn mà ứng dụng sử dụng, như thể hiện trong hình 1. Nếu chỉ có một hoạt động xử lý các ý định, hệ thống ngay lập tức bắt đầu nó.
startActivity ( Intent );
Dưới đây là một ví dụ hoàn chỉnh cho thấy làm thế nào để tạo ra một ý định để xem bản đồ, xác minh rằng một ứng dụng tồn tại để xử lý các ý định, sau đó bắt đầu nó:

// Build the intent
Uri location = Uri.parse("geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+California");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, location);

// Verify it resolves
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(mapIntent, 0);
boolean isIntentSafe = activities.size() > 0;

// Start an activity if it's safe
if (isIntentSafe) {
    startActivity(mapIntent);
}

Chú ý rằng khi bạn bắt đầu một hoạt động bằng cách của bạn Intent để startActivity () và có nhiều hơn một ứng dụng để đáp ứng các mục đích, người dùng có thể chọn ứng dụng để sử dụng mặc định (bằng cách chọn một ô trống ở dưới cùng của hộp thoại; xem hình 1). Này là tốt đẹp khi thực hiện một hành động mà người sử dụng thường muốn sử dụng cùng một ứng dụng mọi thời gian, chẳng hạn như khi mở một trang web (người dùng có thể sử dụng chỉ là một trình duyệt web) hoặc chụp ảnh (người dùng có thể thích một máy ảnh).

Tuy nhiên, theo khóa hoc lap trinh android da nang thì nếu hành động được thực hiện có thể được xử lý bởi nhiều ứng dụng và người dùng có thể thích một ứng dụng khác nhau mỗi thời gian như một “chia sẻ” hành động, mà người sử dụng có thể có một số ứng dụng mà qua đó họ có thể chia sẻ một mục-bạn nên hiển thị rõ ràng một hộp thoại chooser như thể hiện trong hình 2. Hộp thoại chooser buộc người dùng phải chọn ứng dụng để sử dụng cho các hành động mỗi khi (người dùng không thể chọn một ứng dụng mặc định cho các hành động) .

Để hiển thị các chooser, tạo ra một ý định sử dụng createChooser () và vượt qua nó để startActivity () . Ví dụ:

Intent intent = new Intent(Intent.ACTION_SEND);
...

// Always use string resources for UI text.
// This says something like "Share this photo with"
String title = getResources().getString(R.string.chooser_title);
// Create intent to show chooser
Intent chooser = Intent.createChooser(intent, title);

// Verify the intent will resolve to at least one activity
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(chooser);
}

Này sẽ hiển thị một hộp thoại với một danh sách các ứng dụng đáp ứng với mục đích truyền cho createChooser () phương pháp và sử dụng các văn bản được cung cấp như là tiêu đề hộp thoại.

Đăng bình luận

Thành viên bình luận

  • 910 View