Android
[Android] 共有を受け取る
別のアプリでテキストを選んで共有とか、Chromeで共有ってやったときにアプリリストに現れるようにして受け取れるようにする。
AndroidManifest.xmlの受け取るActivityのintent-filterに次のように追加する。
<action android:name="android.intent.action.SEND"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="text/*"/>
これで一覧に表示されるようになる。
共有すると受け取るActivityが起動しonCreateが呼ばれるのでBundleを取得してテキストを取得する。こんな感じ。
Intent intent = getIntent();
String action = intent.getAction();
if(action.equals(Intent.ACTION_SEND)) {
Bundle extras = intent.getExtras();
if(extras != null) {
CharSequence text = extras.getCharSequence(Intent.EXTRA_TEXT);
if(text != null) {
editText.setText(text);
}
}
}
画像を受け取る場合はmimTypeを次のようにする。
<data android:mimeType="image/png"/>
<data android:mimeType="image/jpg"/>
<data android:mimeType="image/jpeg"/>
onCreateはこんな感じに。
Intent intent = getIntent();
String action = intent.getAction();
if(action.equals(Intent.ACTION_SEND)) {
Bundle extras = intent.getExtras();
if(extras != null) {
Object uri = extras.get("android.intent.extra.STREAM");
if(uri instanceof Uri) {
imageView.setImageURI((Uri)uri);
}
}
}
[Android] ActionBarのアイコンを動的に変更する
ActionBarに表示したメニューアイコンを動的に変更してみる。
次の図にあるActionBarのアイコンを押すとアイコンが切り替わるものを作ってみる。

Empty Activityの1つのプロジェクトを用意する。
on.png、off.pngを用意してリソースのdrawableに追加する。
次のようなメニューリソース(main_menu.xml)を用意する。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/lamp"
android:icon="@drawable/off"
app:showAsAction="always" />
</menu>
MainActivityクラスにこのボタンの状態を表す変数を用意する。
// trueで点灯
private boolean lamp = false;
onCreateOptionsMenuをオーバーライドしてメニューを用意する。ここで状態を保存している変数lampをみてアイコンを変更する。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
MenuItem menuLamp = menu.findItem(R.id.lamp);
if(lamp) {
menuLamp.setIcon(R.drawable.on);
} else {
menuLamp.setIcon(R.drawable.off);
}
return true;
}
アイコン(メニュー)を選択したときの処理を追加する。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.lamp:
// 状態を反転
lamp = !lamp;
// メニューの再作成するように設定する
invalidateOptionsMenu();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
ようは、invalidateOptionsMenu()を呼ぶことでメニューを再作成するようにして、メニューを再作成することだ。
Android Studioのコード補完がおかしくなった場合の対処法
なんか急に、いや、Android Studioを2.3.1にバージョンアップしたときからなのか、コード補完がおかしくなった。インポートしていないクラスも補完リストに出てたはずなんだが出なくなった。
うちではメニューのFile - Invalidate Caches/Restartで直った。
