Xperia Z4でMSC接続する方法

懲りずに連日連投のZ4ネタ

  • adb導入済みなこと。
  • 自己責任で。
    長文無理なら一番下までジャンプ
  • 先に言っておくがAndroid6.0では使えない(8/30追記) izana1018.hateblo.jp
    なにか判ればまた書きます。

MTPでしか繋がらない

Xperia Z4をパソコンにUSB接続するとMTPで認識される。

まぁMTP接続は前からできてたし、前機種SOL22では接続モードをMTP⇔MSCで切り替えれたから変えたらええやんっと・・・

ん?設定画面なくね?

接続方法を選択できる設定画面がどこにもない( ;∀;)

自作ツールでiTunesXperiaの同期を取っているので、転送モードがMSCじゃないと同期取れなくて困るんですがーがーがー・・

Heliumを使う

今まで使ったこと無いけど、Heliumとかいうバックアップアプリを使うことでMSCモードに切り替えることが出来るそうな。
価格.com - 『MTPモードとMSCモードの切り替え』 ソニーモバイルコミュニケーションズ Xperia Z4 SO-03G docomo のクチコミ掲示板

できた!

確かに価格コムに書いてある通り、変更画面出てきた!ww

あれ?なんでHeliumは変更画面でてきたん??

もしかして・・画面はあるけど、「普通にはアクセス出来ない」だけだったり・・・

猪口才なやつめ

そんな奴は丸裸にしたるわ!


以下、自己責任で。

Androidソースコードを直接見てみる

ソースコードダウンロード

コマンドズラリ(手抜き

$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ sudo apt-get install curl
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ repo init -u https://android.googlesource.com/platform/manifest
$ repo init -u https://android.googlesource.com/platform/manifest -b android-5.0.2_r3
$ repo sync

フフッ・・32GB食われた

落とし方を間違えたかな?
昨日寝る前に始めて、朝になっても終わってない訳だ。

USB接続の設定画面を呼び出すインテント定義を探す

最初はSettings | Android Developersで探してたんだけど、ACTION_MEMORY_CARD_SETTINGSとかではダメだった。

インテント定義自体はAndroidManifest.xmlに記述されているということで、find . -name "*Manifest*.xml"したところ

見事に大漁でした。ありがとうございました。

キリなさそうだったので、途中で中断。
こうなったら勘でpackages/apps/Settings/AndroidManifest.xml怪しそうじゃね?

ってことで中身を見てUSBとかで検索するとそれっぽいandroid.settings.STORAGE_USB_SETTINGS発見!

 <activity android:name="Settings$UsbSettingsActivity"
         android:label="@string/storage_title_usb"
         android:taskAffinity="com.android.settings"
         android:parentActivityName="Settings$StorageSettingsActivity">
     <intent-filter>
         <action android:name="android.intent.action.MAIN" />
         <action android:name="android.settings.STORAGE_USB_SETTINGS" />
         <action android:name="com.android.settings.STORAGE_USB_SETTINGS" />
         <category android:name="android.intent.category.DEFAULT" />
     </intent-filter>
     <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
         android:value="com.android.settings.deviceinfo.UsbSettings" />
     <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
         android:resource="@id/storage_settings" />
     <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
         android:value="true" />
 </activity>

あー、これ、間違いなく黒ですわ!

adbでインテント起動

C:\>adb.exe shell am start -a android.settings.STORAGE_USB_SETTINGS
Starting: Intent { act=android.settings.STORAGE_USB_SETTINGS }

C:\>

はい、出ました~

f:id:izana1018:20150629232207p:plain:h300

後はSDカードのマウントにチェックすればリムーバブルディスクで繋げれるとな

MTPに戻したい場合

同様に設定画面を出して、MTPにチェックすればOK。

こういうところ、Androidって便利だな~と思う。


追記