30

There is a command to start an activity based on intent: am start. Also to send a broadcast: am broadcast.

I think probably there should be a shell command to query a content provider, probably something like:

query content://com.myapp.authority/path --where 'column=?' --arg 1 --order 'column desc'

or similar.

Is there one?

1
  • How can I make my application safe from such malicious injection of data?, i.e. how to be immune to "adb shell content insert --uri" Commented Mar 23, 2015 at 23:43

3 Answers 3

62

There is a content command:

usage: adb shell content [subcommand] [options]

usage: adb shell content insert --uri <URI> [--user <USER_ID>] --bind <BINDING> [--bind <BINDING>...]
  <URI> a content provider URI.
  <BINDING> binds a typed value to a column and is formatted:
  <COLUMN_NAME>:<TYPE>:<COLUMN_VALUE> where:
  <TYPE> specifies data type such as:
  b - boolean, s - string, i - integer, l - long, f - float, d - double
  Note: Omit the value for passing an empty string, e.g column:s:
  Example:
  # Add "new_setting" secure setting with value "new_value".
  adb shell content insert --uri content://settings/secure --bind name:s:new_setting --bind value:s:new_value

usage: adb shell content update --uri <URI> [--user <USER_ID>] [--where <WHERE>]
  <WHERE> is a SQL style where clause in quotes (You have to escape single quotes - see example below).
  Example:
  # Change "new_setting" secure setting to "newer_value".
  adb shell content update --uri content://settings/secure --bind value:s:newer_value --where "name='new_setting'"

usage: adb shell content delete --uri <URI> [--user <USER_ID>] --bind <BINDING> [--bind <BINDING>...] [--where <WHERE>]
  Example:
  # Remove "new_setting" secure setting.
  adb shell content delete --uri content://settings/secure --where "name='new_setting'"

usage: adb shell content query --uri <URI> [--user <USER_ID>] [--projection <PROJECTION>] [--where <WHERE>] [--sort <SORT_ORDER>]
  <PROJECTION> is a list of colon separated column names and is formatted:
  <COLUMN_NAME>[:<COLUMN_NAME>...]
  <SORT_ORDER> is the order in which rows in the result should be sorted.
  Example:
  # Select "name" and "value" columns from secure settings where "name" is equal to "new_setting" and sort the result by name in ascending order.
  adb shell content query --uri content://settings/secure --projection name:value --where "name='new_setting'" --sort "name ASC"

usage: adb shell content call --uri <URI> --method <METHOD> [--arg <ARG>]
       [--extra <BINDING> ...]
  <METHOD> is the name of a provider-defined method
  <ARG> is an optional string argument
  <BINDING> is like --bind above, typed data of the form <KEY>:{b,s,i,l,f,d}:<VAL>
Sign up to request clarification or add additional context in comments.

4 Comments

How can I make my application safe from such malicious injection of data?, i.e. how to be immune to "adb shell content insert --uri"?
To guard the ContentProvider, add permission usage to your AndroidManifest.xml, so something like this: <permission android:name="com.yourApp.permission.WRITE_PROVIDER" android:protectionLevel="signature" /> <uses-permission android:name="com.yourApp.permission.WRITE_PROVIDER" /> <provider android:name="YourProvider" android:authorities="com.your_app.authority" ` ...` android:writePermission="com.yourApp.permission.WRITE_PROVIDER" ... />
I'm trying to get screen orientation with using this query but it is not working. My command adb shell content query --uri content://settings/system -projection name:value --where "name='user_rotation'"
@kanna In your case, change "name='user_rotation'" to "name=\'user_rotation\'"
0
adb shell content query --uri content://com.myapp.authority/path --where column=x --arg 1 --sort column_name DESC

Comments

0

It appears that some shells (ZSH?) on MacOS require some weird escaping to make this work:

adb shell content query --uri content://settings/global --where "name\ =\ \'airplane_mode_radios\'"

instead of

adb shell content query --uri content://settings/global --where "name = 'airplane_mode_radios'"

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.