macOS Ventura で iPhone を WEBカメラ として使う

iPhone 側で「連携カメラ」をONにしておくと、

Mac側では、カメラを使用したアプリからの選択切り替えができるようになります。

また、以下からも外付けカメラとして切り替えできます。

まずは、試してみましょう!!

 

■ iPhone カメラへの切り替え

👉 Macで外付けカメラを使用する - Apple サポート (日本) hatena-bookmark


設定

 ↓

アクセシビリティ

 ↓

ポインタコントロール

 ↓

ヘッドポインタ の右のオプション(i)

 ↓

カメラオプション

 ↓

カメラ

 ↓

iPhone のカメラを選択




 

■ デスクビュー アプリの起動

Finder から


システム

 ↓

ライブラリ

 ↓

CoreServices

 ↓

Applications

 ↓

デスクビュー

面倒なので、Spotlight から起動すると早いです。

👉 MacのSpotlightで検索する - Apple サポート (日本) hatena-bookmark

👉 AndroidスマホをWEBカメラとして使う【macOS】 hatena-bookmark


最新 Google Pixel 7/7 Pro 端末をお得に購入するための3つのこと。

Google Pixel 7/7 PRO

👉 Google ストアでは Google のデバイスやアクセサリをご購入いただけます hatena-bookmark

世間のスマホの新機種購入意欲は薄れています。

それに対してのキャンペーンでしょう。

 

■ Google ストアクレジット

購入時にクレジットがもらえる
Pixel 7
→ 21000円分

 

■ 下取り

Pixel 7
→ Pixel 4/4a が最も高価に買取ってもらえる。
→ iPhone 11/ 11 Pro が最も高価に買取ってもらえる。(iPhone からの乗り換えは割高)

 

■ メール配信限定割引

プロモーションコードで割引
Pixel 7
→ 10 %引き

 

■ まとめ

購入することがお得な人は、

- Google ストアに購入しようとしていたものがある。
→ Google ストアクレジットで購入。

👉 Google ストア クレジットを使用する - Google ストア ヘルプ hatena-bookmark

- Pixel 4/4 XL, iPhone 11/11 Pro からの乗り換え
→ 下取り高価格。

というところでしょうか。

今後のことも考えて、

「Google ストアの最新ニュースやクーポンの配信」
は登録しておいたほうがいいでしょう。


【Google ストア公式】Pixel 7/7 PRO プロモーションコード でさらにダメ押しの 10%割引 を見逃すな - 2022年10月16日午後11時59分まで

「Google ストアの最新ニュースやクーポンの配信」を登録している人はこんなメールが来ているはずです。

pixel7-プロモーションコード

メール配信限定:Google Pixel 7 または 7 Pro が 10% 引きになるプロモーションコードをプレゼント。下記のコードを購入手続き画面で入力すると割引が適用されます。†

† プロモーション コードによる特典は、グーグル合同会社が提供するものです。Google ストアでのみ利用でき、以下の利用規約が適用されます。

日本にお住まいで、配送先住所が日本にある場合のみご利用いただけます。また、18 歳以上の方のみが対象となります。特典を利用するにはインターネットへのアクセスが必要です。お支払い方法を登録していない場合は、精算時に登録する必要があります。プロモーション コードは、ストアド バリュー型ではなく、1 回限りの利用が可能です。他のユーザーに譲渡したり、現金や現金と同等の価値を持つものと引き換えたりすることはできません。1 回利用すると残高はなくなります。

プロモーション コードを利用するには、store.google.com にアクセスしてPixel 7 またはPixel 7 Proをカートに入れ、精算時にプロモーション コードを入力してください。特典の金額が割引されます。在庫がなくなり次第終了させていただきます。

プロモーション コードの有効期限は 2022 年 10 月 16 日です。プロモーション コードは、適用される法律の範囲内で、Google ストア内の対象商品にのみ利用できます。詳細につきましては、Google ストアのプロモーション利用規約をご確認ください (https://store.google.com/terms/google_store_promo_codes)。


👉 Google ストアでは Google のデバイスやアクセサリをご購入いただけます hatena-bookmark

登録している場合は、以下のように表示されます。この場合はメールが来ているはずです。メールを確認必須です。

今から登録しても遅いかもしれませんが、10%は大きいので見逃さないようにしてほしいということです。

今回は割引の適用ができなかったとしても、今後のためにも登録しておいたほうがいいと思われます。

今回の Pixel7 については各種値引きや特典が多くあります。

私も購入しようかまだ悩んでいるのですが!!

👉 最新 Android Pixel7 端末をお得に購入するための3つのこと。 hatena-bookmark

👉 軽くて小さくて新しいスマホを買いたい iPhone14 vs Pixel7 hatena-bookmark

👌 追記: さらに10%引きクーポンが貰えるとか www
👉 Google マップへ投稿すると Google Pixel 製品を 10%オフ にできる件 hatena-bookmark


Android OS version Market Share

👉 Android OS バージョン確認方法 (platform versions) hatena-bookmark

👉 🚀 iOS Version Market Share hatena-bookmark


@Composable の LifecycleOwner は誰なのか - collectAsStateWithLifecycle

 

Compose までの Flow の collect

coroutine など非同期処理を行う場合ライフサイクルの考慮が必要でしたね!


viewLifecycleOwner.lifecycleScope.launch {
  viewLifecycleOwner.lifecycle.repeatOnLifecycle(STARTED) {
    myViewModel.myUiState.collect {
      // ... 
    }
  }
}

これは、Fragment のビューが STARTED になったときに収集を開始し、RESUMED まで継続し、STOPPED に戻ったときに停止します。

@Composable の LifecycleOwner は誰なのか - collectAsStateWithLifecycle

👉 【MVVM】 Kotlin Flow で使える5つの利用パターン hatena-bookmark

生き死にだけでではないのです。

collect する期間も考えなくてはなりません。

 

Compose では

@Composable 内で、


val items by viewModel.items.collectAsState(initial = emptyList())

というような形で、かんたんに Flow や StateFlow を 収集できます。

しかし、

バックスタック中に、無駄に APIにリクエストしたり、DBにクエリーを投げたりしてません?

逆に、更新されずに古いままの更新されてない画面見せられたりして萎えたりもします。

 

collectAsStateWithLifecycle() の登場

👉 collectAsStateWithLifecycleが追加されたぞ - Qiita hatena-bookmark

所属は以下のようです。

androidx.lifecycle.lifecycle-runtime-compose


implementation "androidx.lifecycle:lifecycle-runtime-compose:2.6.0-alpha01"

実装を見てみます。

ホットな StateFlow と コールドな Flow に向けて2つずつ公開されています。


fun <T> StateFlow<T>.collectAsStateWithLifecycle(
    lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current,
    minActiveState: Lifecycle.State = Lifecycle.State.STARTED,
    context: CoroutineContext = EmptyCoroutineContext
): State<T> 

fun <T> StateFlow<T>.collectAsStateWithLifecycle(
    lifecycle: Lifecycle,
    minActiveState: Lifecycle.State = Lifecycle.State.STARTED,
    context: CoroutineContext = EmptyCoroutineContext
): State<T> 

fun <T> Flow<T>.collectAsStateWithLifecycle(
    initialValue: T,
    lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current,
    minActiveState: Lifecycle.State = Lifecycle.State.STARTED,
    context: CoroutineContext = EmptyCoroutineContext
): State<T>

fun <T> Flow<T>.collectAsStateWithLifecycle(
    initialValue: T,
    lifecycle: Lifecycle,
    minActiveState: Lifecycle.State = Lifecycle.State.STARTED,
    context: CoroutineContext = EmptyCoroutineContext
): State<T>

ライフサイクルや期間を与えて collect 動作を設定できます。

ありがとうございます。

 

LifecycleOwner は誰なのか

前述引用の実装コードより。


...
lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current,
...


LocalLifecycleOwner

ライフサイクルのオーナーといえば、Compose 以前は、

Activity、Fragment、View

ぐらいで考えていましたが。

きっとオーナーは、Activity ではなく、

最上位のルートの @Composable

ではなかろうか。

いや、ワンチャン Activity かもしれん。

見てみましょう。


println("オーナー → ${LocalLifecycleOwner.current}")

 

結果


D: オーナー → androidx.navigation.NavBackStackEntry@4dc222c4

「NavBackStackEntry」さんらしいですわ。

(つづく...)