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);