質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

1回答

918閲覧

Androidの端末にSDカードが挿入されたタイミングで処理をしたい。

xoxoo

総合スコア29

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

1クリップ

投稿2017/09/02 12:03

###実現したいこと

Androidの端末にSDカードが挿入されたタイミングで処理をしたいです。

###試したこと

AndroidManifest.xmlに以下のコードを追加

java

1<receiver android:name="SDCardMountReceiver"> 2 <intent-filter> 3 <action android:name="android.intent.action.MEDIA_MOUNTED"></action> 4 <data android:scheme="file" /> 5 </intent-filter> 6</receiver>

BroadcastReceiver を実装する。

java

1public class SDCardMountReceiver extends BroadcastReceiver { 2 @Override 3 public void onReceive(Context context, Intent intent) { 4 5 } 6}

###発生している問題

public void onReceive で

java

1View decor = this.View decor = this.getWindow().getDecorView(); 2 decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 3 | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);

とソースをかくとエラーが出てしまう。

###エラー

・getWindow()とgetDecorView()が定義されていないと出る。

###実現の為に

Androidの端末にSDカードが挿入されたタイミングでフルスクリーンにするという動作を
完成させるには何が必要でしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まず、getWindow()はActivityに定義されているメソッドで、現在表示されているActivityが存在している画面のプロパティを受け取ることができるものです。

ですが、マニフェストファイルでintent fileterが定義された場合、BroadCastReceiver#onReceive()はActivityが存在しているか否かに関係なく呼び出されます。「フルスクリーンにする」という言葉が、「現在表示しているActivityの画面をフルスクリーン表示する」という意味であるなら、以下のようにしてActivityに通知してあげる必要があります。ただの一例です。

こちらの記事なども参考になるかと思います。
また、以下の公式ドキュメントも読まれると理解が深まるかと思います。

java

1 2public class SdCardMountReceiver extends BroadcastReceiver { 3 4 interface SdCardCallback { 5 void onMounted(); 6 } 7 8 private SdCardCallback callback; 9 10 public SdCardMountReceiver(SdCardCallback callback) { 11 this.callback = callback; 12 } 13 14 @Override 15 public void onReceive(Context context, Intent intent) { 16 // onReceiveを呼び出し元に通知する。 17 callback.onMounted(); 18 } 19}

java

1 2public class MainActivity extends AppCompatActivity { 3 4 private SdCardMountReceiver sdCardMountReceiver; 5 6 @Override 7 protected void onCreate(@Nullable Bundle savedInstanceState) { 8 super.onCreate(savedInstanceState); 9 10 sdCardMountReceiver = new SdCardMountReceiver(new SdCardMountReceiver.SdCardCallback() { 11 @Override 12 public void onMounted() { 13 // フルスクリーンにする記述を書く。 14 } 15 }); 16 // このactivityでのみSDカードの抜き差しを検知する。 17 registerReceiver(sdCardMountReceiver, new IntentFilter("android.intent.action.MEDIA_MOUNTED")); 18 } 19 20 @Override 21 protected void onDestroy() { 22 super.onDestroy(); 23 // このactivityが破棄される時、抜き差しを検知することを止める。 24 unregisterReceiver(sdCardMountReceiver); 25 } 26}

投稿2017/09/03 05:09

hiramekun

総合スコア428

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問