如何通过ADB启动Activity时传递Intent数据并在Activity中获取?
嘿,这个问题我熟!用ADB给启动的Activity传Intent数据其实没那么复杂,分两步走就行——先在ADB命令里加对应参数,再在目标Activity里读取这些数据。我给你详细拆解下:
一、ADB命令中添加Intent数据的几种常用方式
根据你要传递的数据类型,选择对应的参数就行,常见的几种情况如下:
- 传递字符串数据:用
-e(或者等价的--es)参数,格式是-e "键名" "字符串值"
示例命令:adb shell am start -n com.example.myapp/.TargetActivity -e "username" "john_doe" -e "message" "Hello from ADB!" - 传递整数数据:用
--ei参数,格式是--ei "键名" 整数值
示例:adb shell am start -n com.example.myapp/.TargetActivity --ei "user_id" 12345 - 传递布尔值数据:用
--ez参数,格式是--ez "键名" true/false
示例:adb shell am start -n com.example.myapp/.TargetActivity --ez "is_vip" true - 传递Uri数据:有两种方式,一种是用
-d设置Intent的data字段,另一种是用--eu传递Uri类型的extra
示例(设置Intent的data):
示例(传递Uri类型的extra):adb shell am start -n com.example.myapp/.TargetActivity -d "https://example.com"adb shell am start -n com.example.myapp/.TargetActivity --eu "avatar_uri" "content://media/external/images/media/123" - 传递字符串数组:用
--esa参数,格式是--esa "键名" "值1,值2,值3"
示例:adb shell am start -n com.example.myapp/.TargetActivity --esa "hobbies" "reading,hiking,photography"
二、在目标Activity中获取这些Intent数据
接下来在你的目标Activity里,通过getIntent()拿到Intent对象,再根据数据类型调用对应的get方法就行。给你放Java和Kotlin的示例:
Java代码示例
public class TargetActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_target); // 获取启动当前Activity的Intent Intent intent = getIntent(); // 获取字符串数据,第二个参数是默认值(没有该键时返回) String username = intent.getStringExtra("username"); String message = intent.getStringExtra("message"); // 获取整数数据,默认-1表示未获取到 int userId = intent.getIntExtra("user_id", -1); // 获取布尔值数据,默认false boolean isVip = intent.getBooleanExtra("is_vip", false); // 获取Uri类型的data字段 Uri dataUri = intent.getData(); // 获取Uri类型的extra数据 Uri avatarUri = intent.getParcelableExtra("avatar_uri"); // 获取字符串数组 String[] hobbies = intent.getStringArrayExtra("hobbies"); // 拿到数据后就可以根据业务需求使用啦 } }
Kotlin代码示例
class TargetActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_target) val intent = intent // 获取字符串数据 val username = intent.getStringExtra("username") val message = intent.getStringExtra("message") // 获取整数数据 val userId = intent.getIntExtra("user_id", -1) // 获取布尔值数据 val isVip = intent.getBooleanExtra("is_vip", false) // 获取Uri类型的data字段 val dataUri = intent.data // 获取Uri类型的extra数据 val avatarUri = intent.getParcelableExtra<Uri>("avatar_uri") // 获取字符串数组 val hobbies = intent.getStringArrayExtra("hobbies") } }
小提示:如果键名或者值包含空格、特殊字符,一定要用双引号括起来,避免命令解析出错。另外,如果你的Activity设置了
singleInstance这类启动模式,可能会导致新的Intent数据被忽略,这时候可以在命令里加-f 0x10000000来强制创建新的Activity实例传递数据。
内容的提问来源于stack exchange,提问作者kev




