1

Android内の通知の非アクティブ化を追跡しようとしています。これは、x秒ごとに通知dumpsysをポーリングすることで実行することを計画していました。そこで、通知を変数に入れて、$ tmp変数でテキスト(この場合はgoogle.gm)を検索できるようにしました。これに基づいて、$Gmailがtrueまたはfalseに設定されます。

PCでCygwinターミナルを介してスクリプトのセットアップをテストしたところ、うまく機能しましたが、Androidでは機能しませんでした

dumpsys通知を$tmpに取り込むことは正常に機能しますが、Androidで(シェルで)テストすると、*ワイルドカードを受け入れたくないようです。

tmp=$(dumpsys notification)
[[ "$tmp" == *"google.gm"* ]] && Gmail=true || Gmail=false

私はこの2時間ウェブを検索してきましたが、それはちょっと私を夢中にさせるでしょう。私はそれをデバッグするために単純化されたテストを行いました、そしてそれは本当にワイルドカード文字にあるようです

誰かが私が間違っていることを見ていますか?

新しい提案の後、私はそれからこれを作ることができました:

tmp=$(dumpsys notification)
case $tmp in *notify_missed_call*) PRF1="1" ;; *) PRF1="0" ;; esac
case $tmp in *conv_notify*) PRF2="1" ;; *) PRF2="0" ;; esac
case $tmp in *NotYetThere*) PRF3="1" ;; *) PRF3="0" ;; esac
case $tmp in *stat_notify_calendar*) PRF4="1" ;; *) PRF4="0" ;; esac
echo $PRF1,$PRF2,$PRF3,$PRF4, > /sdcard/tmp.txt

しかし、どういうわけか、;で1行に配置した場合にのみ機能します。それらの間の。この作業を複数行にして(保守が容易に)最適化する方法はありますか?

ありがとう

4

1 に答える 1

0

そのAndroidにはbashがないようですので、代わりにPOSIXを使用してみてください。

case $(dumpsys notification) in 
    *google.gm*) Gmail=true ;;
    *) Gmail=false ;;
esac

更新 更新された回答を考えると、の出力で複数の値をチェックしているようですdumpsys notification。これらの文字列の1つだけが1行に出現する可能性があると仮定すると、それを行うためのより良い方法は、シェルまたはawkを使用して1行ずつ読み取ることです。

dumpsys notification | { 
    while read -r line; do
        case $line in
            *notify_missed_call*) prf1=1;;
            *conv_notify*) prf2=1;;
            *NotYetThere*) prf3=1;;
            *stat_notify_calendar*) prf4=1;;
        esac
    done
    echo "${prf1:-0},${prf2:-0},${prf3:-0},${prf4:-0}"
} > /sdcard/tmp.txt

awkを使用すると、同じ行で複数の値を検出できます。

dumpsys notification | awk '
    /notify_missed_call/{missed=1}
    /conv_notify/{conv=1}
    /NotYetThere/{notyet=1}
    /stat_notify_calendar/{cal=1}
    END { print missed+0,conv+0,notyet+0,cal+0 }' > /sdcard/tmp.txt
于 2012-07-16T06:41:52.357 に答える