Chrome 最新安定版でできればいいのだが、Javascript クリップボードへのコピー

王道の本筋からやっていきたい。


(() => {
  
  const text = `${document.title}\n👉 ${location.href}`;

  // copy to clipboard
  focus(); // avoid DOMException: Document is not focused.
  navigator.clipboard.writeText(text).then(
    () => alert(text),
    error => alert(error.message)
  );
  
})();

navigator.clipboard.writeText

これでいいんかな。


【Kotlin】そのアプリが、フォアグラウンドになったとき、フォアグラウンドであるかどうか、を検知・検出する

現在、絶賛?キャンペーン中ですかね。

アプリ起動時広告は、アプリの読み込み画面を収益化することを望むパブリッシャー様を対象とした広告フォーマットです。この広告は、ユーザーがアプリをフォアグラウンドに移動すると表示され、いつでも閉じることができます。

アプリ起動時広告は、アプリの読み込み画面を収益化することを望むパブリッシャー様を対象とした広告フォーマットです。この広告は、ユーザーがアプリをフォアグラウンドに移動すると表示され、いつでも閉じることができます。

👉 アプリ起動時広告  |  Android  |  Google Developers 

眺めてましたよ、おぼつかないサンプルコードを。

複数のコールバックたちに苦しみながらサンプルコードを容赦なく大幅改変していく様子が、API設計の難しさを表してると思います。

今回は、

「アプリがフォアグラウンド(可視状態)になったら何らかの処理をする。」

というやつ関連を抽出しておきます。


class MyApplication : Application(), Application.ActivityLifecycleCallbacks, LifecycleObserver {

  override fun onCreate() {
    super.onCreate()

    ProcessLifecycleOwner.get().lifecycle.addObserver(this)

  }


  @OnLifecycleEvent(Lifecycle.Event.ON_START)
  fun onMoveToForeground() {
    // Show the ad (if available) when the app moves to foreground.

    // do something

  }

👉 googleads-mobile-android-examples/MyApplication.kt at master · googleads/googleads-mobile-android-examples 

Deprecated なのを置き換えて、継承から外します。


ProcessLifecycleOwner.get().lifecycle.addObserver(
  object : DefaultLifecycleObserver {
    override fun onStart(owner: LifecycleOwner) {
      // do something
    }
  }
)


便利ですねこれ。

あと、

「アプリがフォアグラウンド(可視状態)かどうか。」

というやつ。


val foreground: Boolean
  get() = ProcessLifecycleOwner.get().lifecycle.currentState.isAtLeast(Lifecycle.State.RESUMED)

ここは、「RESUMED」でいいのか知らんが、試せばいいか。

👉 DefaultLifecycleObserver や LifecycleEventObserver の使い方 


@SuppressWarnings て使っていますか。

@SuppressWarnings

GitHub で調べてみると以下が多く見られます。


@SuppressWarnings("unused")


@SuppressWarnings("deprecation")


@SuppressWarnings("unchecked")


@SuppressWarnings({"unchecked", "deprecation"})

引数の文字列には他にもいろいろかいてますけども。コンパイラにもよるのだろうけど。

認識されない警告名があってもエラーにはなりません。コンパイラは、認識しないすべての警告名を無視しなければいけません。

👉 SuppressWarnings (Java Platform SE 8 ) 

以下、数個ぐらいは頭に入れておきます。

unused :
使用されていない変数やメソッドが存在した場合の警告を無視する。

deprecation :
使用すべきでないクラスやメソッドを使用したときの「unchecked」警告を無視する。

unchecked :
安全でない型のカーストなどの場合の「unchecked」警告を無視する。

serial :
直列化可能なクラスにserialVersionUIDが未定義の時の警告を無視する。

👉 eclipse - What is the list of valid @SuppressWarnings warning names in Java? - Stack Overflow 

しかし、まあ、あんまり使わないほうがいいですよね。

suppress
他動 〔好ましくないものを力ずくで〕鎮圧する、抑圧する

👉 suppressの意味・使い方・読み方|英辞郎 on the WEB 

👉 java - @SuppressWarnings vs @SuppressLint - Stack Overflow 

👉 Opt-in requirement marker annotation on override requires the same marker on base declaration