Tiện ích tăng thêm tính năng cho nút bấm vô lăng đầu Joying 2Gb

icarvietnam

Administrator
Tiện ích này chỉ dành cho đầu JOYING / 2GB / Sofia - Nó ổn định và làm việc tốt.

Vui lòng sử dụng phiên bản V4.1 nếu bạn chưa nâng cấp lên android Marshmallow!

Lịch sử phát triển các phiên bản:

V6.3: Cập nhật trên cơ sở nền tảng cập nhật 5/25/2017 của Joying ( Android 6.0 )
- Các tập tin đã được tính hợp:
- V6.3-Sofia-1-C9-Server_NOKILL.zip - File gốc chỉ loại bỏ task killer
- V6.3-Sofia-1-C9-Server_NOKILL_GVS.zip - Loại bỏ Task killer, Google Voice Search bằng nút 'SRC'
- V6.3-Custom_Keys-Mods.zip - Chỉnh sửa toàn bộ ( cần file launcher.sh - mô tả bên dưới )

V6.2: Cập nhật theo bản nâng cấp ngày 5/8/2017 của Joying (Android 6.0 )
- Thêm sửa lỗi để nhập bằng giọng nói cho google maps bởi @xdamember2

V6.1: Cập nhật theo bản nâng cấp ngày 5/8/2017 Joying Update ( Android 6.0 )

V6: Cập nhật theo bản nâng cấp ngày 4/27/2017 Joying Update ( Android 6.0 )

Android 5.1.1
V4.1 - Sửa lỗi "Google Voice Search" không giảm âm lượng (3/23/2017) - Android 5.1.1
V4: Cập nhật theo bản nâng cấp ngày 3/14/2017 Joying ROM

Các thay đổi/ bổ sung hỗ trợ:

- MEDIA KEY - Phím cứng trên đầu
- BAND KEY - Phím cứng trên đầu
- ACC_ON - Ngưỡng kích hoạt khi bật đầu
- Các thay đổi nhỏ chạy shell script MEDIA, BAND, ACC_ON ( launcher.sh )
- FIX/UPDATE - Cập nhật danh sách NAVI APPS trong assets/property/navi_app.txt ( cho phép nhiều ứng dụng phát âm thanh khi nghe radio)

V3 -Cập nhật theo bản nâng cấp ngày 2/22/2017 - Bao gồm các chỉnh sửa vô lăng / phím bấm của bản V1 & V2 .

Các thay đổi/ bổ sung hỗ trợ
:
- ACC_OFF - Thêm hành động khi tắt xe (case 98 )
- Thêm case 98 để ví dụ về scripts thực hiện lệnh "PAUSE" - để tắt nhạc khi tắt xe

V2 Gỡ bỏ killAppWhenSleep(); - Loại bỏ các tác vụ bị tắt khi sleep
Bổ sung hỗ trợ các phím và thay đổi nhỏ để ví dụ việc chạy shell script ( launcher.sh )
- HANG - steering wheel softkey
- DVD - Phím cứng trên đầu
- EJECT- Phím cứng trên đầu
- CALL/BT softkey - Sửa lỗi phím không phản hồi sau khi kết thúc cuộc gọi.

V1 phiên bản đầu tiên

Có ít rủi ro với mod này, nhưng vui lòng hiểu bạn đang làm gì, và sao lưu tệp tin gốc của apk (trong trường hợp bạn muốn hoàn lại). Kịch bản cài đặt sẽ thực hiện sao lưu nhưng sẽ ghi đè lên bản sao lưu nếu được cài đặt nhiều lần.

Tôi cũng đã thêm một "launcher_simple.sh" đơn giản vào trong zip, nó chỉ làm thay đổi chức năng của Source (quay radio, pandora, spotify) và nút Call (lệnh google voice). Các kịch bản này là những ví dụ làm việc về những gì có thể làm được. Nếu bạn muốn phiên bản đơn giản hơn, chỉ cần đổi tên "launcher_simple.sh" thành "launcher.sh" trước khi cài đặt.

---------------------- Bài đăng gốc -----------------
Tôi đã dành khá nhiều thời gian làm việc để có thể tùy chỉnh các phím vô lăng của Joying 2GB headunit (JY-UL135N2 / 2GB / Sofia). Tôi đã có một tiến bộ tốt và nghĩ rằng tôi sẽ chia sẻ những gì tôi đã làm cho đến nay.

Hệ thống gói /system/app/Sofia-1-C9-Server-V1.0/Sofia-1-C9-Server-V1.0.apk đã được sửa đổi để bắt các phím được gửi bởi MCU, và do đó có thể thay đổi Hành vi của các bấm phím. Các phím được liệt kê dưới đây được hỗ trợ, và sẽ khởi chạy một quy trình "shell", do đó bất kỳ hành động nào có thể được thực hiện bằng dòng lệnh có thể được thực hiện. Nếu bạn không quen thuộc với dòng lệnh Android, bạn có thể ngạc nhiên về mức độ mạnh mẽ của nó. Như một lưu ý phụ, công việc này rất nhanh và hiệu quả. Từ thử nghiệm của tôi, việc nhấn phím được thực thi tức khắc mà không có hiện tượng trễ. Nói cách khác, nó hoạt động rất tốt.

Ngoài nút điều khiển vô lăng, cũng cung cấp khả năng khởi chạy một lệnh hoặc một loạt lệnh khi RESUME nhận được.
Bao gồm kịch bản của tôi (ví dụ) có thể được sử dụng làm mô hình cho tùy chỉnh của riêng bạn. Kịch bản ví dụ bao gồm thực hiện các hành động sau:

CALL/BT PHONE(27) - Bấm 1 lần là HOME, Bấm 2 lần là BACK, Bấm 3 lần là mở Google Voice Commands

MODE/SRC(37) - Chuyển tuần tự các ứng dụng: Radio, Pandora, Spotify, Stock Music - Nếu như lâu hơn 1 phút kể từ lần bấm trước nó sẽ đưa bạn quay trở lại ứng dụng nghe nhạc gần nhất trước đó và sau đó tiếp tục vòng tuần tự

NAVI(9) - Bấm một lần là Torque, 2 lần là google maps

PAUSE/PLAY(85*), NEXT(87*), PREVIOUS(88*), FASTBACK(89*), FASTFWD(90*),HOME(3), BACK(4) - Hiện tại đang đặt theo mặc định của hệ thống. Chúng được chuyển qua script do vậy bạn hoàn toàn có thể đặt các tính năng khác nếu muốn.

ACC_ON(97) - Thực thi lệnh khi bật xe. Script ví dụ đang đặt một lệnh 'play' để khởi động lại trình nghe nhạc đã bị Pause lúc tắt xe.

ACC_OFF(98) - Thực hiện khi bật xe. Tôi đề nghị bạn chỉ định "pause" trong trường hợp này, để dừng trình phát nhạc hiện tại. Giải quyết vấn đề trình phát nhạc kéo dài vài phút sau khi xe tắt.

RESUME(99) - Thực thi resume của hệ thống.

Xin vui lòng lưu ý các phím điều khiển Media được đánh dấu bằng (*) được mã hóa cứng tới các chức năng cụ thể trong ứng dụng Joying. Chúng chỉ được truyền đến Shell Script khi bạn KHÔNG sử dụng ứng dụng Media của Joying. Chúng sẽ chỉ làm việc như các phím gốc khi bạn ở trong các ứng dụng media của Joying.

Hãy nhớ rằng, file apk chỉ là cấp mã cho bạn, những gì bạn làm với nó sau đó là do bạn! Tôi đã cố gắng bình luận trong file ví dụ đủ để có thể hiểu được với một người có kiến thức lập trình cơ bản.

Kèm theo là tệp zip với Sofia-1-C9-Server-V1.0.apk, launcher.sh (ví dụ của tôi), và cài đặt kịch bản. Tập lệnh launcher.sh phải được đặt trong thư mục / data (/data/launcher.sh), vì nó được mã hóa cứng trong tệp tin apk.

Tập lệnh cài đặt là một tập lệnh shell / linux, nhưng bạn có thể dễ dàng sao chép / dán lệnh adb nếu sử dụng windows.

[Chú ý: Vui lòng cấp nhật bản mới nhất của busybox! Tôi đã tìm thấy một số lỗi trong phiên bản đã tích hợp bởi Joying mà nó gây ra nhiều vấn đề.]



Nguồn bài viết: https://forum.xda-developers.com/android-auto/android-head-units/joying-2gb-steering-wheel-key-t3543390
 

Đính kèm

Sửa lần cuối:

icarvietnam

Administrator
Nội dung file thiết lập tùy biến vô lăng ví dụ (launcher.sh):

Mã:
# V3.0 - 2/26/2017 - Đoạn mã ví dụ cho Joying 2GB Sofia
#
# This script is designed to customize the commands issued from steering wheel
# keys and is an example of what can be done. Not all programs/actions have
# been tested, but this should serve as a guide to your own custom script.
#
# All output from this script goes to /dev/null, however the system call is
# shown in the 'adb logcat' as a debug statement with the tag MCUKEY. If
# you want to preserve script output for debugging, you may want to consider a
# wrapper script to capture. When this script is run by the system, access to
# /sdcard is not available.  Hence you may want to use /data to store anything
# such as counts or command output.  When run by the system it is run with the
# 'system' login.  If you are testing the script using adb, make sure you
# either delete or change ownership of the files so 'system' has r/w access.
#
# USEFUL LAUNCH COMMDANDS defined as variables
#

# Goto Home screen
home="input keyevent 3"

# Back
back="input keyevent 4"

# pause  
pause="input keyevent 127"

# Play
play="input keyevent 126"

# Recent Task list
recent="input keyevent KEYCODE_APP_SWITCH"

# Launch Web Page ( you may need to get creative with quotes depending on page )
web="am start -a android.intent.action.VIEW -n com.android.browser/.BrowserActivity http://images.intellicast.com/WxImages/RadarLoop/spi_None_anim.gif"

# ScreenFilter
scrflt="am start com.haxor/com.haxor.ScreenFilter"

# Google Voice Command
gvc="am start com.google.android.googlequicksearchbox/com.google.android.googlequicksearchbox.VoiceSearchActivity"

# Google maps
maps="am start com.google.android.apps.maps/com.google.android.maps.MapsActivity"

# Radio
radio="am start com.syu.radio/com.syu.radio.Launch"

# I heart radio
iheart="am start com.clearchannel.iheartradio.controller/com.clearchannel.iheartradio.controller.activities.NavDrawerActivity"
iheart_press=$play

# Pandora
pandora="am start com.pandora.android/com.pandora.android.Main --activity-single-top --activity-brought-to-front"

# Press position on touchscreen for play/pause, small swipe was more reliable
pandora_press="input swipe 550 580 555 585 500";

# Spotify
spotify="am start com.spotify.music/com.spotify.music.MainActivity"

# Press position on touchscreen for play/pause
spotify_press="input swipe 945 500 950 505 200"

# SYU Music ( stock music player )
music="am start com.syu.music/com.syu.media.act.Act_Music"

# Torque
torque="am start org.prowl.torque/org.prowl.torque.landing.FrontPage"


# key is the only arguemnt recieved and actions are based on the key number
key=$1

case $key in
        27) # BTPHONE/PTT - 1x press for BACK , 2x for HOME , 3 Google Voice
        #
        # This section will execute three different commands based on
        # if one, two or three presses were recieved. Command(s) are
        # put in  background for .7 second and then checked to see
        # if subsequent presses was recieved before execution.
        #
        last=`cat /data/$key.cnt`
        last=$((last+1))
        case $last in
        1)
            echo $last > /data/$key.cnt
            (sleep .7 &&  [ `cat /data/$key.cnt` = $last ]  && echo 0 > /data/$key.cnt && $back ) &
        ;;
        2)
            echo $last > /data/$key.cnt
            (sleep .5 &&  [ `cat /data/$key.cnt` = $last ]  && echo 0 > /data/$key.cnt && $home ) &
        ;;
        3)
            echo 0 > /data/$key.cnt
            $gvc
                ;;
                *)
                        echo 0 > /data/$key.cnt
            $home
                ;;

                esac
    ;;

        9) # NAVI - 1x press Torque, 2x for google maps
                #
                # This section will execute two different commands based on if
                # one or two presses were recieved. First command is put in
                # background for .4 second and then checked to see if subsequent
                # press was recieved before execution.
                # Second command ( button press ) is immediate execution and
                # lets first command know not to execute
        #
        last=`cat /data/$key.cnt`
        last=$((last+1))
                case $last in
                1)
                        echo $last > /data/$key.cnt
                        (sleep .4 && [ `cat /data/$key.cnt` = $last ] && echo 0 > /data/$key.cnt && $torque) &
                ;;
                2)
                        echo 0 > /data/$key.cnt
            $maps
                ;;
                *)
                        echo 0 > /data/$key.cnt
            $home
                ;;
                esac
    ;;

        37) # SOURCE/MODE
        #
        # Toggle between applications Pandora, Spotify, Stock Music App,
        # and Radio.  If longer than 1m,  then bring up the last one
        # called before continuing cycle
        #

        # Check if key press in last minute by checking if key file was modified
        found=`busybox find /data/$key.cnt -mmin -1 | wc -l`
        if [  "$found" = "0" ]
        then
            # More than 1 minute bring current player to front
             next=`cat /data/$key.last`
            # Do not send pause or play
            keypress=0
        else
             next=`cat /data/$key.cnt`
            keypress=1
            # Send pause before changing to next
            $pause
        fi
        echo $next > /data/$key.last
       
        case $next in
        0) echo 1 > /data/$key.cnt
            $pandora
            ( [ $keypress = 1 ] && sleep 3 && $pandora_press)
        ;;
                1) echo 2 > /data/$key.cnt
             $spotify
            ( [ $keypress = 1 ] && sleep 3 && $spotify_press)
        ;;
                2) echo 3 > /data/$key.cnt
             $music
            ( [ $keypress = 1 ] && sleep 3 && $music_press)
        ;;
                3) echo 0 > /data/$key.cnt
            $radio
        ;;
        *) echo 0 > /data/$key.cnt
            echo 0 > /data/$key.last
            $home
        ;;
        esac
    ;;

        28) # HANG
    ;;
    31) # DVD
    ;;
    32) # EJECT  
        ;;
        33) # MEDIA KEY - Not used by me
        ;;
        34) # BAND KEY - Not used by me
        ;;  

        97) # ACC_ON  - execute on key on
    $play
        ;;
        98) # ACC_OFF - executes on key off
    $pause;
        ;;
        99) # RESUME  - executes on resume of system
         # Commands to be executed on resume

     ;;

        *) # Pass any other keys pressed as keyevent
       # 3-Home, 4-Back, 85-PlayPause, 88-Prev, 86-Stop, 89-FB
       # 90-FF, 87-Next, 126-Play, 127-Pause
        input keyevent $key  
    ;;
esac  # End $key cases

exit 0
 
Top