세나☆
14.11.18
조회 수 7727
추천 수 5
댓글 5

원문 쓰레드

http://forum.xda-developers.com/galaxy-s5/unified-development/guide-how-to-kitkat-4-4-2-music-control-t2838810/post54625791


4.4.2 에서는 모든 기능이 정상 작동할테지만...


4.4.4 는 부작용이 윗버튼의 기능이 맛이갑니다. 참고하세요.( 이부분은 가이드를 뭔가 제가 못 본 부분이 있습니다.)


필요한 파일은 android.policy.jar 와 secsettings.apk 입니다.


Step 1 android.policy.jar



PhoneWindowManager$SettingsObserver.smali


    .local v0, "resolver":Landroid/content/ContentResolver; 아래에


    const-string v1, "volbtn_music_controls"

    invoke-static {v1}, Landroid/provider/Settings$System;->getUriFor(Ljava/lang/String;)Landroid/net/Uri;

    move-result-object v1

    invoke-virtual {v0, v1, v4, p0, v5}, Landroid/content/ContentResolver;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/ContentObserver;I)V

    const-string v1, "volbtn_timeout"

    invoke-static {v1}, Landroid/provider/Settings$System;->getUriFor(Ljava/lang/String;)Landroid/net/Uri;

    move-result-object v1

    invoke-virtual {v0, v1, v4, p0, v5}, Landroid/content/ContentResolver;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/ContentObserver;I)V

    const-string v1, "volbtn_vol_up"

    invoke-static {v1}, Landroid/provider/Settings$System;->getUriFor(Ljava/lang/String;)Landroid/net/Uri;

    move-result-object v1

    invoke-virtual {v0, v1, v4, p0, v5}, Landroid/content/ContentResolver;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/ContentObserver;I)V

    const-string v1, "volbtn_vol_down"

    invoke-static {v1}, Landroid/provider/Settings$System;->getUriFor(Ljava/lang/String;)Landroid/net/Uri;

    move-result-object v1

    invoke-virtual {v0, v1, v4, p0, v5}, Landroid/content/ContentResolver;->registerContentObserver(Landroid/net/Uri;ZLandroid/database/ContentObserver;I)V 


추가


PhoneWindowManager.smali


# instance fields  아래에


.field final mVolumeUpLongPress:Ljava/lang/Runnable;

.field final mVolumeDownLongPress:Ljava/lang/Runnable;

.field mIsVolLongPressed:Z

.field mVolBtnMusicControls:I

.field mVolBtnTimeout:I

.field mVolBtnVolDown:I

.field mVolBtnVolUp:I


을 추가


PowerLongPress:Ljava/lang/Runnable; 검색


아랫줄에


    new-instance v0, Lcom/android/internal/policy/impl/PhoneWindowManager$MusicNext;

    invoke-direct {v0, p0}, Lcom/android/internal/policy/impl/PhoneWindowManager$MusicNext;-><init>(Lcom/android/internal/policy/impl/PhoneWindowManager;)V

    iput-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mVolumeUpLongPress:Ljava/lang/Runnable;

    new-instance v0, Lcom/android/internal/policy/impl/PhoneWindowManager$MusicPrev;

    invoke-direct {v0, p0}, Lcom/android/internal/policy/impl/PhoneWindowManager$MusicPrev;-><init>(Lcom/android/internal/policy/impl/PhoneWindowManager;)V

    iput-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mVolumeDownLongPress:Ljava/lang/Runnable;


추가


.method public hasNavigationBar()Z 검색


윗 줄에


.method handleVolumeLongPress(I)V
    .registers 6

    const/16 v1, 0x18

    if-ne p1, v1, :cond_f

    iget-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mVolumeUpLongPress:Ljava/lang/Runnable;

    :goto_6
    iget-object v1, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mHandler:Landroid/os/Handler;

    iget v2, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mVolBtnTimeout:I

    int-to-long v2, v2

    invoke-virtual {v1, v0, v2, v3}, Landroid/os/Handler;->postDelayed(Ljava/lang/Runnable;J)Z

    return-void

    :cond_f
    iget-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mVolumeDownLongPress:Ljava/lang/Runnable;

    goto :goto_6
.end method

.method handleVolumeLongPressAbort()V
    .registers 3

    iget-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mHandler:Landroid/os/Handler;

    iget-object v1, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mVolumeUpLongPress:Ljava/lang/Runnable;

    invoke-virtual {v0, v1}, Landroid/os/Handler;->removeCallbacks(Ljava/lang/Runnable;)V

    iget-object v0, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mHandler:Landroid/os/Handler;

    iget-object v1, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mVolumeDownLongPress:Ljava/lang/Runnable;

    invoke-virtual {v0, v1}, Landroid/os/Handler;->removeCallbacks(Ljava/lang/Runnable;)V

    return-void
.end method


추가


interceptKeyBeforeQueueing: VOLUME key-down while ringing: Silence ringer 검색


조금 윗줄에 getTelephonyService()Lcom/android/internal/telephony/ITelephony; 가 있습니다.


조금 더 윗줄에     :sswitch_~~ 라고 있습니다.


아랫줄에


    move-object/from16 v0, p0

    iget v0, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mVolBtnMusicControls:I

    if-eqz v0, :cond_2b1

    invoke-virtual/range {p0 .. p0}, Lcom/android/internal/policy/impl/PhoneWindowManager;->isMusicActive()Z

    move-result v0

    if-eqz v0, :cond_2b1

    move-object/from16 v0, p0

    iget-boolean v0, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mScreenOnEarly:Z

    if-nez v0, :cond_2b1

    if-eqz v6, :cond_29f

    move-object/from16 v0, p0

    move/from16 v1, v12  (4.4.4 는 v13 갤삼 노트4 알파 아마 동일할겁니다.)

    invoke-virtual {v0, v1}, Lcom/android/internal/policy/impl/PhoneWindowManager;->handleVolumeLongPress(I)V

    const/4 v15, 0x0

    goto/16 :goto_a

    :cond_29f
    move-object/from16 v0, p0

    invoke-virtual {v0}, Lcom/android/internal/policy/impl/PhoneWindowManager;->handleVolumeLongPressAbort()V

    iget-boolean v1, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mIsVolLongPressed:Z

    if-nez v1, :cond_2ae

    move/from16 v1, v12 (4.4.4 는 v13  갤삼 노트4 알파 아마 동일할겁니다.)

    const/4 v3, 0x3

    invoke-virtual {v0, v3, v1}, Lcom/android/internal/policy/impl/PhoneWindowManager;->handleVolumeKey(II)V

    :cond_2ae
    const/4 v1, 0x0

    iput-boolean v1, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mIsVolLongPressed:Z

    :cond_2b1


를 추가


.method protected sendMediaButtonEvent(I)V
    .registers 15

    invoke-static {}, Landroid/os/SystemClock;->uptimeMillis()J

    move-result-wide v1

    new-instance v11, Landroid/content/Intent;

    const-string v4, "android.intent.action.MEDIA_BUTTON"

    const/4 v5, 0x0

    invoke-direct {v11, v4, v5}, Landroid/content/Intent;-><init>(Ljava/lang/String;Landroid/net/Uri;)V

    new-instance v0, Landroid/view/KeyEvent;

    const/4 v5, 0x0

    const/4 v7, 0x0

    move-wide v3, v1

    move v6, p1

    invoke-direct/range {v0 .. v7}, Landroid/view/KeyEvent;-><init>(JJIII)V

    invoke-virtual {p0, v0}, Lcom/android/internal/policy/impl/PhoneWindowManager;->dispatchMediaKeyWithWakeLockToAudioService(Landroid/view/KeyEvent;)V

    const/16 v2, 0x1

    invoke-static {v0, v2}, Landroid/view/KeyEvent;->changeAction(Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;

    move-result-object v0

    invoke-virtual {p0, v0}, Lcom/android/internal/policy/impl/PhoneWindowManager;->dispatchMediaKeyWithWakeLockToAudioService(Landroid/view/KeyEvent;)V

    return-void

    const-string v4, "android.intent.extra.KEY_EVENT"

    invoke-virtual {v11, v4, v0}, Landroid/content/Intent;->putExtra(Ljava/lang/String;Landroid/os/Parcelable;)Landroid/content/Intent;

    iget-object v4, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mContext:Landroid/content/Context;

    const/4 v5, 0x0

    invoke-virtual {v4, v11, v5}, Landroid/content/Context;->sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;)V

    new-instance v12, Landroid/content/Intent;

    const-string v4, "android.intent.action.MEDIA_BUTTON"

    const/4 v5, 0x0

    invoke-direct {v12, v4, v5}, Landroid/content/Intent;-><init>(Ljava/lang/String;Landroid/net/Uri;)V

    new-instance v3, Landroid/view/KeyEvent;

    const/4 v8, 0x1

    const/4 v10, 0x0

    move-wide v4, v1

    move-wide v6, v1

    move v9, p1

    invoke-direct/range {v3 .. v10}, Landroid/view/KeyEvent;-><init>(JJIII)V

    const-string v4, "android.intent.extra.KEY_EVENT"

    invoke-virtual {v12, v4, v3}, Landroid/content/Intent;->putExtra(Ljava/lang/String;Landroid/os/Parcelable;)Landroid/content/Intent;

    iget-object v4, p0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mContext:Landroid/content/Context;

    const/4 v5, 0x0

    invoke-virtual {v4, v12, v5}, Landroid/content/Context;->sendOrderedBroadcast(Landroid/content/Intent;Ljava/lang/String;)V

    return-void
.end method


를 맨 아래 메서드 아래에 추가



.method public updateSettings()V 검색


.method public updateSettings()V
    .registers 26

    .prologue
    .line 2010
    move-object/from16 v0, p0

    iget-object v0, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mContext:Landroid/content/Context;

    move-object/from16 v20, v0

    invoke-virtual/range {v20 .. v20}, Landroid/content/Context;->getContentResolver()Landroid/content/ContentResolver;

    move-result-object v숫자<< 중요


대충 이렇게 비슷하게 생겻을겁니다.


    move-result-object v숫자 아래에


   const-string v12, "volbtn_music_controls"

    const/4 v13, 0x0

    invoke-static {v숫자, v12, v13}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I

    move-result v3

    move-object/from16 v0, p0

    iput v3, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mVolBtnMusicControls:I

    const-string v12, "volbtn_timeout"

    const/16 v13, 0x190

    invoke-static {v숫자, v12, v13}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I

    move-result v3

    move-object/from16 v0, p0

    iput v3, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mVolBtnTimeout:I

    const-string v12, "volbtn_vol_up"

    const/16 v13, 0x57

    invoke-static {v숫자, v12, v13}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I

    move-result v3

    move-object/from16 v0, p0

    iput v3, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mVolBtnVolUp:I

    const-string v12, "volbtn_vol_down"

    const/16 v13, 0x58

    invoke-static {v숫자, v12, v13}, Landroid/provider/Settings$System;->getInt(Landroid/content/ContentResolver;Ljava/lang/String;I)I

    move-result v3

    move-object/from16 v0, p0

    iput v3, v0, Lcom/android/internal/policy/impl/PhoneWindowManager;->mVolBtnVolDown:I


를 추가

자신의 v숫자로 전부 교체하세요.


첨부파일은 자신의 스말리 폴더에 넣고 스말리합니다.


Step 2 SecSettings.apk


받은 스말리와 xml을 자신의 디텍토리에 맞게 넣으세요.


arrays.xml


   
 
    <string-array name="volbtn_action_entries">
        <item>Next</item>
        <item>Pause</item>
        <item>Play</item>
        <item>Play/Pause</item>
        <item>Previous</item>
        <item>Stop</item>
    </string-array>
    <string-array name="volbtn_action_values">
        <item>87</item>
        <item>127</item>
        <item>126</item>
        <item>85</item>
        <item>88</item>
        <item>86</item>
    </string-array>
    <string-array name="volbtn_timeout_entries">
        <item>100ms</item>
        <item>150ms</item>
        <item>200ms</item>
        <item>250ms</item>
        <item>300ms</item>
        <item>350ms</item>
        <item>400ms</item>
        <item>450ms</item>
        <item>500ms</item>
    </string-array>
    <string-array name="volbtn_timeout_values">
        <item>100</item>
        <item>150</item>
        <item>200</item>
        <item>250</item>
        <item>300</item>
        <item>350</item>
        <item>400</item>
        <item>450</item>
        <item>500</item>
    </string-array>


를 추가


strings.xml


    <string name="volbtn_toggle_title">Volume Music Control</string>
    <string name="volbtn_vol_up_title">Volume Up action</string>
    <string name="volbtn_vol_up_summary">%s</string>
    <string name="volbtn_vol_down_title">Volume Down action</string>
    <string name="volbtn_vol_down_summary">%s</string>
    <string name="volbtn_timeout_title">Timeout</string>


를 추가


자신의 설정 UI에 맞는 xml을 들어가

    <header android:icon="@drawable/ic_settings_dock" android:title="@string/volbtn_toggle_title" android:key="volbtn_music_controls" android:fragment="com.android.settings.VolBtnSettings" />

   

를 추가



컴파일하세요. 그리고 디컴파일 다시 합니다.


첨부해둔 public.xml 을 보고 자신의 ID에 맞게.. 새로 추가한 스말리의 ID값을 수정하세요.












Extra Form
첨부
public.xml  [File Size:937.1KB/Download:9]
volbtn_settings.xml  [File Size:1.1KB/Download:7]
VolBtnSettings.smali  [File Size:23.7KB/Download:8]
PhoneWindowManager$MusicPrev.smali  [File Size:3.1KB/Download:6]
PhoneWindowManager$MusicNext.smali  [File Size:3.1KB/Download:9]
댓글을 남겨야 다운로드가 가능합니다. 감사의 댓글을 달고 오른쪽 확인버튼을 눌러주세요.
다운로드시 일주일에 한개 이상의 게시물 작성이 필요합니다. 지금 자유게시판에 회원님의 하루를 남겨보세요.
추천♡버튼을 잊지 마세요. 추천인과 회원님 모두 포인트가 적립됩니다.
댓글 5
댓글 쓰기 권한이 없습니다.
강좌 정렬 목록 검색 쓰기
등록된 글이 없습니다.
1