从BroadcastReceiver启动Webbrowser时不相关的IntentChooser选项

时间:2018-10-09 07:50:36

标签: java android

我添加了一个在通知中显示的按钮,根据条件,如果通知中包含http,它将显示“显示图像/视频”按钮。下面是相同的代码。

else if (!iurl.isEmpty()) {
            builder.addAction(R.drawable.noticon, "Show Images/Videos", resultPendingIntent);

这是resultPendingIntent的代码。

if (iurl.contains("http")) {
            Log.i(TAG, "http");
            intent1.putExtra("action", "http");
            intent1.putExtra("url", iurl);
            intent1.putExtra("id", ID_SMALL_NOTIFICATION);
            resultPendingIntent =
                    PendingIntent.getBroadcast(
                            mCtx,
                            ID_SMALL_NOTIFICATION,
                            intent1,
                            PendingIntent.FLAG_CANCEL_CURRENT
                    );

上面的代码工作正常,我收到了一个接收器,当用户单击按钮时,其动作定义如下。

if (bundle.containsKey("action")) {
                    actiontype = bundle.getString("action");
                    if (bundle.containsKey("url")) {
                        url = bundle.getString("url");
                    }
                    Log.i(TAG, "Received action: " + actiontype);
                    if (actiontype != null && actiontype.equalsIgnoreCase("http")) {
                        Intent intent1 = new Intent(Intent.ACTION_VIEW);
                        intent1.setData(Uri.parse(url));
                        intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        context.startActivity(intent1);
                    }
                }

但是现在,这段代码并没有打开chrome来启动url,而是弹出了意图选择器,其中包含不相关的选项,例如拨号器,地图等,以进行操作。

如果我使用应用的“正常”活动更改ACTION_VIEW,一切正常。

请帮助。

1 个答案:

答案 0 :(得分:0)

我希望这会有所帮助:

void open(Activity activity, String url) {
    Uri uri = Uri.parse("googlechrome://navigate?url=" + url);
    Intent i = new Intent(Intent.ACTION_VIEW, uri);
    if (i.resolveActivity(activity.getPackageManager()) == null) {
        i.setData(Uri.parse(url));
    }
    activity.startActivity(i);
}