-->

Android

ブラウザリンクからAndroidアプリを起動する方法。 | 燃えよKEYBOARD
このエントリーをはてなブックマークに追加

別のアプリでテキストを選んで共有とか、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);
                }
            }
        }

このエントリーをはてなブックマークに追加

ActionBarに表示したメニューアイコンを動的に変更してみる。

次の図にあるActionBarのアイコンを押すとアイコンが切り替わるものを作ってみる。

 003

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を2.3.1にバージョンアップしたときからなのか、コード補完がおかしくなった。インポートしていないクラスも補完リストに出てたはずなんだが出なくなった。

うちではメニューのFile - Invalidate Caches/Restartで直った。

001

このエントリーをはてなブックマークに追加

Android Studioのエラー(CreateProcess error=216):「ぷろぐらむ」とか:So-netブログ
このエントリーをはてなブックマークに追加

↑このページのトップヘ