Java Code Examples for android.content.Intent#setSelector()

The following examples show how to use android.content.Intent#setSelector() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: WebSchemeIntent.java    From YCWebView with Apache License 2.0 6 votes vote down vote up
/**
 * 静默处理内部页面支持的scheme.
 *
 * @param context                           上下文
 * @param uri                               链接
 * @return                                  true表示被处理
 */
public static boolean handleSilently(@NonNull Context context, Uri uri) {
    final String scheme = uri.getScheme();
    if (TextUtils.isEmpty(scheme) || !isSilentType(scheme)) {
        return false;
    }
    try {
        Intent intent = Intent.parseUri(uri.toString(), Intent.URI_INTENT_SCHEME);
        intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        // forbid launching activities without BROWSABLE category
        intent.addCategory("android.intent.category.BROWSABLE");
        // forbid explicit call
        intent.setComponent(null);
        // forbid intent with selector intent
        intent.setSelector(null);
        if (context instanceof Activity) {
            return startWithActivity(intent, (Activity) context);
        } else {
            startWithAppContext(intent, context);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return true;
}
 
Example 2
Source File: ShortcutProxyActivity.java    From letv with Apache License 2.0 5 votes vote down vote up
protected void onCreate(Bundle savedInstanceState) {
    try {
        super.onCreate(savedInstanceState);
        Intent intent = getIntent();
        if (intent != null) {
            Intent forwordIntent = getForwarIntent();
            if (forwordIntent != null) {
                forwordIntent.addFlags(268435456);
                forwordIntent.putExtras(intent);
                if (VERSION.SDK_INT >= 15) {
                    forwordIntent.setSelector(null);
                }
                if (ApkManager.getInstance().isConnected()) {
                    if (isPlugin(forwordIntent)) {
                        startActivity(forwordIntent);
                    }
                    finish();
                    return;
                }
                waitAndStart(forwordIntent);
                return;
            }
            finish();
            return;
        }
        finish();
    } catch (Exception e) {
        e.printStackTrace();
        finish();
    }
}
 
Example 3
Source File: CordovaUriHelper.java    From L.TileLayer.Cordova with MIT License 5 votes vote down vote up
/**
 * Give the host application a chance to take over the control when a new url
 * is about to be loaded in the current WebView.
 *
 * @param view          The WebView that is initiating the callback.
 * @param url           The url to be loaded.
 * @return              true to override, false for default behavior
 */
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)
boolean shouldOverrideUrlLoading(WebView view, String url) {
    // Give plugins the chance to handle the url
    if (this.appView.pluginManager.onOverrideUrlLoading(url)) {
        // Do nothing other than what the plugins wanted.
        // If any returned true, then the request was handled.
        return true;
    }
    else if(url.startsWith("file://") | url.startsWith("data:"))
    {
        //This directory on WebKit/Blink based webviews contains SQLite databases!
        //DON'T CHANGE THIS UNLESS YOU KNOW WHAT YOU'RE DOING!
        return url.contains("app_webview");
    }
    else if (appView.getWhitelist().isUrlWhiteListed(url)) {
        // Allow internal navigation
        return false;
    }
    else if (appView.getExternalWhitelist().isUrlWhiteListed(url))
    {
        try {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            intent.addCategory(Intent.CATEGORY_BROWSABLE);
            intent.setComponent(null);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
                intent.setSelector(null);
            }
            this.cordova.getActivity().startActivity(intent);
            return true;
        } catch (android.content.ActivityNotFoundException e) {
            LOG.e(TAG, "Error loading url " + url, e);
        }
    }
    // Intercept the request and do nothing with it -- block it
    return true;
}
 
Example 4
Source File: CordovaUriHelper.java    From IoTgo_Android_App with MIT License 5 votes vote down vote up
/**
 * Give the host application a chance to take over the control when a new url
 * is about to be loaded in the current WebView.
 *
 * @param view          The WebView that is initiating the callback.
 * @param url           The url to be loaded.
 * @return              true to override, false for default behavior
 */
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)
boolean shouldOverrideUrlLoading(WebView view, String url) {
    // Give plugins the chance to handle the url
    if (this.appView.pluginManager.onOverrideUrlLoading(url)) {
        // Do nothing other than what the plugins wanted.
        // If any returned true, then the request was handled.
        return true;
    }
    else if(url.startsWith("file://") | url.startsWith("data:"))
    {
        //This directory on WebKit/Blink based webviews contains SQLite databases!
        //DON'T CHANGE THIS UNLESS YOU KNOW WHAT YOU'RE DOING!
        return url.contains("app_webview");
    }
    else if (appView.getWhitelist().isUrlWhiteListed(url)) {
        // Allow internal navigation
        return false;
    }
    else if (appView.getExternalWhitelist().isUrlWhiteListed(url))
    {
        try {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            intent.addCategory(Intent.CATEGORY_BROWSABLE);
            intent.setComponent(null);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
                intent.setSelector(null);
            }
            this.cordova.getActivity().startActivity(intent);
            return true;
        } catch (android.content.ActivityNotFoundException e) {
            LOG.e(TAG, "Error loading url " + url, e);
        }
    }
    // Intercept the request and do nothing with it -- block it
    return true;
}
 
Example 5
Source File: ShortcutProxyActivity.java    From DroidPlugin with GNU Lesser General Public License v3.0 5 votes vote down vote up
@Override
protected void onCreate(Bundle savedInstanceState) {
    try {
        super.onCreate(savedInstanceState);
        Intent intent = getIntent();

        if (intent != null) {
            Intent forwordIntent = getForwarIntent();
            if (forwordIntent != null) {
                forwordIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                forwordIntent.putExtras(intent);
                //安全审核问题
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
                    forwordIntent.setSelector(null);
                }
                if (PluginManager.getInstance().isConnected()) {
                    if (isPlugin(forwordIntent)) {
                        execStartForwordIntent(forwordIntent);
                    }
                    finish();
                } else {
                    waitAndStart(forwordIntent);
                }
            } else {
                finish();
            }
        } else {
            finish();
        }
    } catch (Exception e) {
        e.printStackTrace();
        finish();
    }
}
 
Example 6
Source File: CordovaUriHelper.java    From bluemix-parking-meter with MIT License 5 votes vote down vote up
/**
 * Give the host application a chance to take over the control when a new url
 * is about to be loaded in the current WebView.
 *
 * @param view          The WebView that is initiating the callback.
 * @param url           The url to be loaded.
 * @return              true to override, false for default behavior
 */
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)
boolean shouldOverrideUrlLoading(WebView view, String url) {
    // Give plugins the chance to handle the url
    if (this.appView.pluginManager.onOverrideUrlLoading(url)) {
        // Do nothing other than what the plugins wanted.
        // If any returned true, then the request was handled.
        return true;
    }
    else if(url.startsWith("file://") | url.startsWith("data:"))
    {
        //This directory on WebKit/Blink based webviews contains SQLite databases!
        //DON'T CHANGE THIS UNLESS YOU KNOW WHAT YOU'RE DOING!
        return url.contains("app_webview");
    }
    else if (appView.getWhitelist().isUrlWhiteListed(url)) {
        // Allow internal navigation
        return false;
    }
    else if (appView.getExternalWhitelist().isUrlWhiteListed(url))
    {
        try {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            intent.addCategory(Intent.CATEGORY_BROWSABLE);
            intent.setComponent(null);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
                intent.setSelector(null);
            }
            this.cordova.getActivity().startActivity(intent);
            return true;
        } catch (android.content.ActivityNotFoundException e) {
            LOG.e(TAG, "Error loading url " + url, e);
        }
    }
    // Intercept the request and do nothing with it -- block it
    return true;
}
 
Example 7
Source File: CordovaUriHelper.java    From reader with MIT License 5 votes vote down vote up
/**
 * Give the host application a chance to take over the control when a new url
 * is about to be loaded in the current WebView.
 *
 * @param view          The WebView that is initiating the callback.
 * @param url           The url to be loaded.
 * @return              true to override, false for default behavior
 */
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)
boolean shouldOverrideUrlLoading(WebView view, String url) {
    // Give plugins the chance to handle the url
    if (this.appView.pluginManager.onOverrideUrlLoading(url)) {
        // Do nothing other than what the plugins wanted.
        // If any returned true, then the request was handled.
        return true;
    }
    else if(url.startsWith("file://") | url.startsWith("data:"))
    {
        //This directory on WebKit/Blink based webviews contains SQLite databases!
        //DON'T CHANGE THIS UNLESS YOU KNOW WHAT YOU'RE DOING!
        return url.contains("app_webview");
    }
    else if (appView.getWhitelist().isUrlWhiteListed(url)) {
        // Allow internal navigation
        return false;
    }
    else if (appView.getExternalWhitelist().isUrlWhiteListed(url))
    {
        try {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            intent.addCategory(Intent.CATEGORY_BROWSABLE);
            intent.setComponent(null);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
                intent.setSelector(null);
            }
            this.cordova.getActivity().startActivity(intent);
            return true;
        } catch (android.content.ActivityNotFoundException e) {
            LOG.e(TAG, "Error loading url " + url, e);
        }
    }
    // Intercept the request and do nothing with it -- block it
    return true;
}
 
Example 8
Source File: CordovaUriHelper.java    From reader with MIT License 5 votes vote down vote up
/**
 * Give the host application a chance to take over the control when a new url
 * is about to be loaded in the current WebView.
 *
 * @param view          The WebView that is initiating the callback.
 * @param url           The url to be loaded.
 * @return              true to override, false for default behavior
 */
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)
boolean shouldOverrideUrlLoading(WebView view, String url) {
    // Give plugins the chance to handle the url
    if (this.appView.pluginManager.onOverrideUrlLoading(url)) {
        // Do nothing other than what the plugins wanted.
        // If any returned true, then the request was handled.
        return true;
    }
    else if(url.startsWith("file://") | url.startsWith("data:"))
    {
        //This directory on WebKit/Blink based webviews contains SQLite databases!
        //DON'T CHANGE THIS UNLESS YOU KNOW WHAT YOU'RE DOING!
        return url.contains("app_webview");
    }
    else if (appView.getWhitelist().isUrlWhiteListed(url)) {
        // Allow internal navigation
        return false;
    }
    else if (appView.getExternalWhitelist().isUrlWhiteListed(url))
    {
        try {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            intent.addCategory(Intent.CATEGORY_BROWSABLE);
            intent.setComponent(null);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
                intent.setSelector(null);
            }
            this.cordova.getActivity().startActivity(intent);
            return true;
        } catch (android.content.ActivityNotFoundException e) {
            LOG.e(TAG, "Error loading url " + url, e);
        }
    }
    // Intercept the request and do nothing with it -- block it
    return true;
}
 
Example 9
Source File: CordovaUriHelper.java    From crosswalk-cordova-android with Apache License 2.0 5 votes vote down vote up
/**
 * Give the host application a chance to take over the control when a new url
 * is about to be loaded in the current WebView.
 *
 * @param view          The WebView that is initiating the callback.
 * @param url           The url to be loaded.
 * @return              true to override, false for default behavior
 */
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)
boolean shouldOverrideUrlLoading(XWalkView view, String url) {
    // Give plugins the chance to handle the url
    if (this.appView.pluginManager.onOverrideUrlLoading(url)) {
        // Do nothing other than what the plugins wanted.
        // If any returned true, then the request was handled.
        return true;
    }
    else if(url.startsWith("file://") | url.startsWith("data:"))
    {
        //This directory on WebKit/Blink based webviews contains SQLite databases!
        //DON'T CHANGE THIS UNLESS YOU KNOW WHAT YOU'RE DOING!
        return url.contains("app_webview");
    }
    else if (appView.getWhitelist().isUrlWhiteListed(url)) {
        // Allow internal navigation
        return false;
    }
    else if (appView.getExternalWhitelist().isUrlWhiteListed(url))
    {
        try {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            intent.addCategory(Intent.CATEGORY_BROWSABLE);
            intent.setComponent(null);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
                intent.setSelector(null);
            }
            this.cordova.getActivity().startActivity(intent);
            return true;
        } catch (android.content.ActivityNotFoundException e) {
            LOG.e(TAG, "Error loading url " + url, e);
        }
    }
    // Intercept the request and do nothing with it -- block it
    return true;
}
 
Example 10
Source File: FeedbackFragment.java    From hash-checker with Apache License 2.0 4 votes vote down vote up
private void sendEmail(
        @NonNull String text,
        @NonNull String email
) {
    Intent emailIntent = new Intent(
            Intent.ACTION_SEND
    );
    emailIntent.putExtra(
            Intent.EXTRA_EMAIL,
            new String[] { email }
    );

    String subject = getString(R.string.common_app_name);
    emailIntent.putExtra(
            Intent.EXTRA_SUBJECT,
            subject
    );
    emailIntent.putExtra(
            Intent.EXTRA_TEXT,
            text
    );

    Intent selectorIntent = new Intent(
            Intent.ACTION_SENDTO
    );
    selectorIntent.setData(
            Uri.parse(
                    "mailto:"
            )
    );
    emailIntent.setSelector(
        selectorIntent
    );

    String chooseMessage = String.format(
            "%s:",
            getString(R.string.message_email_app_chooser)
    );

    try {
        startActivity(
                Intent.createChooser(
                        emailIntent,
                        chooseMessage
                )
        );
    } catch (ActivityNotFoundException e) {
        L.e(e);
        ShareCompat.IntentBuilder
                .from(getActivity())
                .setText("message/rfc822")
                .addEmailTo(email)
                .setSubject(subject)
                .setText(text)
                .setChooserTitle(chooseMessage)
                .startChooser();
    }
}
 
Example 11
Source File: DownloadHandler.java    From Xndroid with GNU General Public License v3.0 4 votes vote down vote up
/**
 * Notify the host application a download should be done, or that the data
 * should be streamed if a streaming viewer is available.
 *
 * @param context            The context in which the download was requested.
 * @param url                The full url to the content that should be downloaded
 * @param userAgent          User agent of the downloading application.
 * @param contentDisposition Content-disposition http header, if present.
 * @param mimetype           The mimetype of the content reported by the server
 * @param contentSize        The size of the content
 */
public void onDownloadStart(@NonNull Activity context, @NonNull PreferenceManager manager, String url, String userAgent,
                            @Nullable String contentDisposition, String mimetype, String contentSize) {

    Log.d(TAG, "DOWNLOAD: Trying to download from URL: " + url);
    Log.d(TAG, "DOWNLOAD: Content disposition: " + contentDisposition);
    Log.d(TAG, "DOWNLOAD: Mimetype: " + mimetype);
    Log.d(TAG, "DOWNLOAD: User agent: " + userAgent);

    // if we're dealing wih A/V content that's not explicitly marked
    // for download, check if it's streamable.
    if (contentDisposition == null
        || !contentDisposition.regionMatches(true, 0, "attachment", 0, 10)) {
        // query the package manager to see if there's a registered handler
        // that matches.
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.parse(url), mimetype);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addCategory(Intent.CATEGORY_BROWSABLE);
        intent.setComponent(null);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
            intent.setSelector(null);
        }
        ResolveInfo info = context.getPackageManager().resolveActivity(intent,
            PackageManager.MATCH_DEFAULT_ONLY);
        if (info != null) {
            // If we resolved to ourselves, we don't want to attempt to
            // load the url only to try and download it again.
            if (BuildConfig.APPLICATION_ID.equals(info.activityInfo.packageName)
                || MainActivity.class.getName().equals(info.activityInfo.name)) {
                // someone (other than us) knows how to handle this mime
                // type with this scheme, don't download.
                try {
                    context.startActivity(intent);
                    return;
                } catch (ActivityNotFoundException ex) {
                    // Best behavior is to fall back to a download in this
                    // case
                }
            }
        }
    }
    onDownloadStartNoStream(context, manager, url, userAgent, contentDisposition, mimetype, contentSize);
}
 
Example 12
Source File: DownloadHandler.java    From JumpGo with Mozilla Public License 2.0 4 votes vote down vote up
/**
 * Notify the host application a download should be done, or that the data
 * should be streamed if a streaming viewer is available.
 *
 * @param context            The context in which the download was requested.
 * @param url                The full url to the content that should be downloaded
 * @param userAgent          User agent of the downloading application.
 * @param contentDisposition Content-disposition http header, if present.
 * @param mimetype           The mimetype of the content reported by the server
 * @param contentSize        The size of the content
 */
public void onDownloadStart(@NonNull Activity context, @NonNull PreferenceManager manager, String url, String userAgent,
                            @Nullable String contentDisposition, String mimetype, String contentSize) {

    Log.d(TAG, "DOWNLOAD: Trying to download from URL: " + url);
    Log.d(TAG, "DOWNLOAD: Content disposition: " + contentDisposition);
    Log.d(TAG, "DOWNLOAD: Mimetype: " + mimetype);
    Log.d(TAG, "DOWNLOAD: User agent: " + userAgent);

    // if we're dealing wih A/V content that's not explicitly marked
    // for download, check if it's streamable.
    if (contentDisposition == null
        || !contentDisposition.regionMatches(true, 0, "attachment", 0, 10)) {
        // query the package manager to see if there's a registered handler
        // that matches.
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(Uri.parse(url), mimetype);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addCategory(Intent.CATEGORY_BROWSABLE);
        intent.setComponent(null);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
            intent.setSelector(null);
        }
        ResolveInfo info = context.getPackageManager().resolveActivity(intent,
            PackageManager.MATCH_DEFAULT_ONLY);
        if (info != null) {
            // If we resolved to ourselves, we don't want to attempt to
            // load the url only to try and download it again.
            if (BuildConfig.APPLICATION_ID.equals(info.activityInfo.packageName)
                || MainActivity.class.getName().equals(info.activityInfo.name)) {
                // someone (other than us) knows how to handle this mime
                // type with this scheme, don't download.
                try {
                    context.startActivity(intent);
                    return;
                } catch (ActivityNotFoundException ex) {
                    // Best behavior is to fall back to a download in this
                    // case
                }
            }
        }
    }
    onDownloadStartNoStream(context, manager, url, userAgent, contentDisposition, mimetype, contentSize);
}
 
Example 13
Source File: CordovaUriHelper.java    From cordova-amazon-fireos with Apache License 2.0 4 votes vote down vote up
/**
 * Give the host application a chance to take over the control when a new url
 * is about to be loaded in the current WebView.
 *
 * @param view          The WebView that is initiating the callback.
 * @param url           The url to be loaded.
 * @return              true to override, false for default behavior
 */
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)
boolean shouldOverrideUrlLoading(AmazonWebView view, String url) {
     // The WebView should support http and https when going on the Internet
    if(url.startsWith("http:") || url.startsWith("https:"))
    {
        // We only need to whitelist sites on the Internet! 
        if(appView.getWhitelist().isUrlWhiteListed(url))
        {
            return false;
        }
    }
    // Give plugins the chance to handle the url
    if (this.appView.pluginManager.onOverrideUrlLoading(url)) {
        // Do nothing other than what the plugins wanted.
        // If any returned true, then the request was handled.
        return true;
    }
    else if(url.startsWith("file://") | url.startsWith("data:"))
    {
        //This directory on WebKit/Blink based webviews contains SQLite databases!
        //DON'T CHANGE THIS UNLESS YOU KNOW WHAT YOU'RE DOING!
        return url.contains("app_webview");
    }
    else if (appView.getWhitelist().isUrlWhiteListed(url)) {
        // Allow internal navigation
        return false;
    }
    else if (appView.getExternalWhitelist().isUrlWhiteListed(url))
    {
        try {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            intent.addCategory(Intent.CATEGORY_BROWSABLE);
            intent.setComponent(null);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
                intent.setSelector(null);
            }
            this.cordova.getActivity().startActivity(intent);
            return true;
        } catch (android.content.ActivityNotFoundException e) {
            LOG.e(TAG, "Error loading url " + url, e);
        }
    }
    // Intercept the request and do nothing with it -- block it
    return true;
}