Android端末にはブラウザや電話アプリ、地図アプリ、メールアプリ、カレンダーアプリなどなど、普通は様々なアプリがデフォルトでインストールされているのだが、今回はそれらのアプリを自作アプリから呼び出してみる。
以下は、自作アプリから「ブラウザ」アプリを起動するサンプルである。
まずはメッセージリソース。
strings.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="button_invoke_other_app">ブラウザアプリを呼び出す</string>
</resources>
次に画面レイアウト。
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="invokeOtherApp"
android:text="@string/button_invoke_other_app" />
</LinearLayout>
</LinearLayout>
そしてアクティビティ本体。
MainActivity.java
package com.example.myfirstapp;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Date;
import java.util.List;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
/**
* 他アプリ(ブラウザアプリ)を呼び出す
*
* @param view
*/
@SuppressLint("ShowToast")
public void invokeOtherApp(View view) {
// インテント作成
Uri uri = Uri.parse("http://www.android.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
// パッケージマネージャからブラウザアプリを探す
PackageManager packageManager = getPackageManager();
List<ResolveInfo> activities = packageManager.queryIntentActivities(
intent, 0);
boolean isIntentSafe = activities.size() > 0;
if (isIntentSafe) {
startActivity(intent);
} else {
// ブラウザアプリが未インストールの場合
Toast.makeText(this, "The App Not Found", Toast.LENGTH_LONG).show();
}
}
}
どのアプリを呼び出すかのポイントとなるのは、#invokeOtherApp内の「インテント作成」の部分である。
Uri uri = Uri.parse("http://www.android.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
上はブラウザアプリを呼び出す例だが、もし電話アプリを呼び出したいときは、以下のようにコーディングする。
Uri uri = Uri.parse("tel:5551234");
Intent intent = new Intent(Intent.ACTION_DIAL, uri);
さらに地図アプリ。
Uri uri = Uri.parse("geo:37.422219,-122.08364?z=14"); // z param is zoom level
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
さらにさらにメールアプリ。
Intent intent = new Intent(Intent.ACTION_SEND);
// The intent does not have a URI, so declare the "text/plain" MIME type
intent.setType(HTTP.PLAIN_TEXT_TYPE);
intent.putExtra(Intent.EXTRA_EMAIL, new String[] {"jon@example.com"}); // recipients
intent.putExtra(Intent.EXTRA_SUBJECT, "Email subject");
intent.putExtra(Intent.EXTRA_TEXT, "Email message text");
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("content://path/to/email/attachment"));
// You can also attach multiple items by passing an ArrayList of Uris
トドメはカレンダーアプリだ。
Intent intent = 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); intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, beginTime.getTimeInMillis()); intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime.getTimeInMillis()); intent.putExtra(Events.TITLE, "Ninja class"); intent.putExtra(Events.EVENT_LOCATION, "Secret dojo");
どのアプリを起動するかをユーザに選ばせたいときは以下のようにコーディングする。この例ではブラウザが複数インストールされていることを前提で、使いたいブラウザをユーザに選ばせている。
// Build the intent
Uri uri = Uri.parse("http://www.android.com");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
String title = (String) getResources().getText(R.string.chooser_title);
// Create and start the chooser
Intent chooser = Intent.createChooser(intent, title);
startActivity(chooser);