■intentでアプリケーションを起動しよう
▼クラスを指定して起動させる
Windowsみたいに実行ファイルという考えが無いからクラスを直接指定して起動させるという考え方です
android.content.Intent intent = new android.content.Intent(view.getContext(),com.jp.myapplication.MainActivity.class);
startActivity(intent);
▼自分自身のクラスを起動させる
クラスを直接指定してもいいんですが、自分のパッケージ名からでもいけるみたいです。
android.content.Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName());
startActivity(intent);
▼ブラウザを起動させる
アドレスを文字データとして与えることによってブラウザで目的のページを開くことができます。
android.content.Intent intent = new android.content.Intent(android.content.Intent.ACTION_VIEW, android.net.Uri.parse("http:7ujm.net"));
startActivity(intent);
▼ある文字をWEBで検索する
この場合は"a"を検索していますがいろんな文字で検索ができます。
android.content.Intent intent = new android.content.Intent(android.content.Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY,"a");
startActivity(intent);
▼地図を起動させる
googleマップなどの座標情報を入れておくと自動的にその場所に飛んで表示してくれます。
android.content.Intent intent = new android.content.Intent(android.content.Intent.ACTION_VIEW, android.net.Uri.parse("geo:35.685304,139.752794"));
startActivity(intent);
▼テキストを開く
テキストを開くと色々なアプリの選択画面が出て文字を送る事ができます。
android.content.Intent intent = new android.content.Intent(android.content.Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(android.content.Intent.EXTRA_TEXT,"aaa");
startActivity(intent);
▼メールソフトを起動させメールを作成する
実行するとメールソフトにアドレスやタイトル、内容が入力されて送信するばっかの状態になります。
"EXTRA_EMAIL"の部分を XXX@XXX.com みたいなEメールアドレスに変更すると自動的に入力されます。
android.content.Intent intent = new android.content.Intent(android.content.Intent.ACTION_SENDTO, android.net.Uri.parse("mailto:"));
intent.putExtra(android.content.Intent.EXTRA_EMAIL, new String []{"EXTRA_EMAIL"});
intent.putExtra(android.content.Intent.EXTRA_SUBJECT, "EXTRA_SUBJECT");
intent.putExtra(android.content.Intent.EXTRA_TEXT, "EXTRA_TEXT");
startActivity(intent);
▼動画を再生する
動画ファイルのパスとファイル名を指定すると動画が再生できます。
android.content.Intent intent = new android.content.Intent(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(android.net.Uri.parse("file:/storage/emulated/0/170416120442.MOV"), "video/mp4");
startActivity(intent);
▼画像を表示する
画像のパスとファイル名を指定すると画像が表示できます。
android.content.Intent intent = new android.content.Intent(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(android.net.Uri.parse("file:/storage/emulated/0/Pictures/Screenshots/Screenshot_2017-05-07-12-06-31.png"), "image/*");
startActivity(intent);
■起動先との連帯
キーと値のセットで情報を送り、キーを使って情報を取得します。
▼起動先に情報を送る
intent.putExtra("key1",i);
intent.putExtra("key2","文字");
▼起動元から情報を受け取る
android.content.Intent intent = getIntent();
int int_p=intent.getIntExtra("key1", 0);//もしkey1の値が無い場合には0を出す
String string_p=intent.getStringExtra("key2");
■ファイルマネージャを起動させて選択したファイル名を取得する
注意事項として、ファイルマネージャじゃないと動きません。
元から入っているgoogleドライブやダウンロードなどではファイルの選択ができません。
ファイルマネージャが入っていないといきなりgoogleドライブなどが動き出します。
public class MainActivity extends android.app.Activity {
android.widget.Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
button=new android.widget.Button(this);
android.widget.FrameLayout fl=new android.widget.FrameLayout(this);
fl.addView(button);
setContentView(fl);
button.setOnClickListener(new button_listener());
}
static final int REQUEST_GET = 1;
private class button_listener implements android.view.View.OnClickListener {
public void onClick(android.view.View view) {
android.content.Intent intent = new android.content.Intent(android.content.Intent.ACTION_GET_CONTENT);
intent.setType("file/*");
if (intent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(intent, REQUEST_GET);
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, android.content.Intent data) {
if (requestCode == REQUEST_GET && resultCode == RESULT_OK) {
String str;
try {
str = java.net.URLDecoder.decode(data.getDataString(), "utf-8");
}catch(Exception e){str=e.toString();}
button.setText(str);
}
}
}
ボタンを押してファイルを選択するとこのように表示されます。
■ACTION_PICKで画像データの取得
ACTION_GET_CONTENTは選択を他のプログラムに任せてその結果をもらうみたいな感じでしたが、
ACTION_PICKでIntentから直接画像データを取得してみます。
下のプログラムでは画面にイメージボタンを動的に張り付けてクリックすると画像選択アプリケーションが立ち上がり、選択された画像がボタンに表示されます。
public class MainActivity extends android.app.Activity {
android.widget.ImageButton imagebutton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
imagebutton=new android.widget.ImageButton(this);
android.widget.FrameLayout fl=new android.widget.FrameLayout(this);
fl.addView(imagebutton);
setContentView(fl);
imagebutton.setOnClickListener(new button_listener());
}
static final int REQUEST_GET = 1;
private class button_listener implements android.view.View.OnClickListener {
public void onClick(android.view.View view) {
android.content.Intent intent = new android.content.Intent(android.content.Intent.ACTION_PICK);
intent.setType("image/*");
if (intent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(intent, REQUEST_GET);
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, android.content.Intent data) {
if (requestCode == REQUEST_GET && resultCode == RESULT_OK) {
try {
android.graphics.Bitmap bitmap = android.provider.MediaStore.Images.Media.getBitmap(getContentResolver(), data.getData());
//ビットマップのサイズを取得する
int width = bitmap.getWidth();
int height = bitmap.getHeight();
//ウィンドウのサイズを取得する
android.graphics.Point point = new android.graphics.Point();
this.getWindowManager().getDefaultDisplay().getSize(point);
//なるべく画面一杯に表示されるように90度回転させる
if(((width>height) && (point.x<point.y))
|| ((width<height) && (point.x>point.y))) {
android.graphics.Matrix matrix = new android.graphics.Matrix();
matrix.setRotate(90, width / 2, height / 2);
bitmap = android.graphics.Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
}
//画像をボタンの内側にサイズ変更して表示する
imagebutton.setScaleType(android.widget.ImageView.ScaleType.CENTER_INSIDE);
imagebutton.setImageBitmap(bitmap);
}catch(Exception e){
android.content.Context context = getApplicationContext();
android.widget.Toast t=android.widget.Toast.makeText(context,e.toString(), android.widget.Toast.LENGTH_LONG);
t.show();
}
}
}
}
赤文字の部分で画像の選択から取得、表示を行っています。
紫色の行は無くても動きますが、画像を画面いっぱいに表示する処理を行っています。
ただし、このまま実行すると、画像選択後にこのようになるかもしれません。
このような例外がスローされた場合には、画像を取得する為にアプリケーションに外部記憶領域の読み込み(書き込み)をできる権限を与えてやる必要があります。
AndroidManifest.xmlを開き以下の赤文字部分を追加します。
追加することにより外部記憶領域の読み書きができるようになります。
べつに書き込みが必要ないのなら、読み込みのみの READ_EXTERNAL_STORAGE でもいいですね。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jp.myapplication">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
▲トップページ
>
android