ターミナル(またはadbシェル)から「設定」の下にリストされているアクティビティを開始する


13

このアクティビティをターミナルから開始したい: com.android.settings.Settings$PowerUsageSummaryActivity

私は試した

am start -S com.android.settings/.Settings$PowerUsageSummaryActivity

これは私が得るものです:

Stopping: com.android.settings
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.settings/.Settings }

問題は、am startコマンドが一部を省略している$PowerUsageSummaryActivityため、基本的には標準の「設定」メニューを開いているだけです。その特定の「電力使用量の概要」ページを端末から開くにはどうすればよいですか?


2
あなたは、単一引用符にそれを入れてみました持っている、すなわち'com.android.settings/.Settings$PowerUsageSummaryActivity'-またはエスケープ$のようなcom.android.settings/.Settings\$PowerUsageSummaryActivity-リテラルを扱うときにシェル上で行うには通常のものである$兆候はない変数を示しますか?
イジー

ターミナルからトップでTaskerのRunLogアクティビティを開くのはどうですか?Taskerには、ログウィンドウを開くための3ドットメニューがあります。
ニコラ・アル。

回答:


12

コメントに書いたように、シェルプロンプト(またはシェルスクリプト)で作業する場合は、特別な注意が必要な特殊文字がいくつかあります。それらの1つは、$通常は変数を示す記号です。これを文字どおりに解釈する必要がある場合は、エスケープする(または文字列全体を一重引用符で囲む)必要があります。引用符の同様のルール。

あなたのコマンドがエスケープされた状態 $でどのように見えるかは、eldarerathisの答えですでに見つけることができます

shell@android:/ # am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity

の前の「バックスラッシュ」に注意してください$-これがエスケープ記号です。コマンドに文字通り解釈されるものが含まれている場合は、引用符または空白にも同じものを使用します。たとえば、

myscript.sh first\ parameter\!
myscript.sh "first parameter!"

どちらも同じことを行います。文字列を単一のパラメーターにします。あなたのam startコマンドの例では、これは解析中に起こったことです:

  • コマンド: am
  • パラメーター1: start
  • パラメーター2: -S
  • パラメーター3: com.android.settings/.Settings$PowerUsageSummaryActivity
    • $、通訳:変数が$PowerUsageSummaryActivity設定されていないので、空
    • 結論:パラメーター3は com.android.settings/.Settings

また、あなたが経由で直接これを実行する場合がありますadb shell、コマンドを使用すると、エスケープするか、コマンドを引用する必要があるので、二回の解析シェルを通過し、再びこのような:

user@desktop:~$ adb shell am start -n 'com.android.settings/.Settings\$PowerUsageSummaryActivity'

ああ、ありがとう!ああ、どうすれば$をエスケープすることを忘れることができます...私は正式に
恥ずかしい

人生のささいなこと...簡単に見落とせます:)ところで:それで問題が解決した場合は、答えの1つを「承認済み」としてマークすることを検討してください(横にあるチェックマークをクリックします)他の人々が同様のトラップを利用することは明らかです:)
Izzy

ああ、私はチェックマークを見つけました。だからこれは私が答えを受け入れる方法です...おかげでこれは私がstackexchangeを使用するのは初めてです;)
juniecho

いつでも大歓迎です:)今、あなたはそれがここでどれだけうまく機能しているかを見ます:言葉を広める:)
Izzy

3
bashでは、私の場合、これだけが機能しましたadb shell 'am start -n com.android.settings/.Settings\$PowerUsageSummaryActivity'。理由がわかりません。
消防士

5

$サブクラス名でエスケープすると、動作するはずです:

shell@android:/ # am start -S com.android.settings/.Settings\$PowerUsageSummaryActivity
Starting: Intent { cmp=com.android.settings/.Settings$PowerUsageSummaryActivity }
shell@android:/ #

別のオプションは、代わりに、電力使用量画面がリッスンするインテントを送信することです。

shell@android:/ # am start -a android.intent.action.POWER_USAGE_SUMMARY

インテントを見つけるには<action>、AndroidManifest.xmlファイルのSettings "application"(GitHub表示できます)のタグを調べます。例として、次のアクティビティ定義を示しSettings$PowerUsageSummaryActivityます。

<activity android:name="Settings$PowerUsageSummaryActivity"
        android:label="@string/power_usage_summary_title"
        android:uiOptions="none"
        android:taskAffinity=""
        android:excludeFromRecents="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <action android:name="android.intent.action.POWER_USAGE_SUMMARY" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="com.android.settings.SHORTCUT" />
    </intent-filter>
    <!-- Some other stuff here... -->
</activity>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.