You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过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):
    adb shell am start -n com.example.myapp/.TargetActivity -d "https://example.com"
    
    示例(传递Uri类型的extra):
    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

火山引擎 最新活动