Android使用data uri启动activity或service

设定AndroidManifest.xml

在AndroidManifest.xml文件中,我们可以设定activity或service的data。

<!--    activity定义方式    -->
<activity
    android:name=".page.main.MainActivity">
    <intent-filter>

        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />

        <data
            android:host="com.example.myapplication"
            android:path="/page/activity"
            android:scheme="data" />

    </intent-filter>
</activity>

<!--    service定义方式    -->
<service
    android:name=".page.main.MyService">
    <intent-filter>

        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />

        <data
            android:host="com.example.myapplication"
            android:path="/page/service"
            android:scheme="data" />

    </intent-filter>
</service >

在完成对activity或service的配置之后,我们可以通过adb shell命令启动他们。

// activity启动方式
adb shell am start -d "data://com.example.myapplication/page/activity"
// service启动方式
adb shell am startservice -d "data://com.example.myapplication/page/service"

在代码中发送data uri

try {
    Intent intent = new Intent();
    // 配置intent的uri,此处以activity为例
    intent.setData(Uri.parse("data://com.example.myapplication/page/activity"));
    // 配置包名
    intent.setPackage("com.example.myapplication");
    startActivity(intent); //若是service,使用startService(intent)
} catch(Throwable e) {
    e.printStackTrace();
}

可见主要工作集中在了Manifest文件的配置中,正确的配置对我们的启动很重要。

为data uri配置附加内容

是否可以如同intent.putExtra那样,添加额外的内容?

adb shell am start -d "data://com.example.myapplication/page/activity?name=Jack\&num=12345"

我们依然是用命令行起手,可见我们要附加额外内容,在我们原有的命令后从“?”开始附加,名称对应内容,以“&”拼接各个要附加的字段。

如例子中的“name=Jack\&num=12345” ,便是包含了name和num两个字段。此处使用了反斜杠,为的是转义“&”字符,可根据需要修改。

我们还可以附加json字符串作为内容,但同样需要进行转义。

接收data uri的内容

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    Uri intentData = intent.getData();
    if (intentData != null) {
        // manifest文件中的三个配置地址都可以获取
        String scheme = intentData.getScheme();
        String host = intentData.getHost();
        String path = intentData.getPath();
        // 获取附加值
        String name = intentData.getQueryParameter("name");
        String num = intentData.getQueryParameter("num");
    }

}

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值