zoukankan      html  css  js  c++  java
  • android 调用微信QQ的其他应用打开列表中添加自己的应用,并且获取uri brave

    清单文件配置指定的activity配置如下:

    复制代码
     <!--调用微信的其他应用打开列表添加自己应用  -->
                <intent-filter>
                    <action android:name="android.intent.action.VIEW" />
                    <category android:name="android.intent.category.DEFAULT" />
                    <data android:scheme="content"/>
                    <!-- 允许所有类型文件-->
                    <data android:mimeType="*/*" />
                    <!-- 只允许图片文件-->
                    <!--<data android:mimeType="image/*"/>-->
                </intent-filter>
                <!--调用QQ的其他应用打开列表添加自己应用  -->
                <intent-filter>
                    <action android:name="android.intent.action.VIEW" />
                    <category android:name="android.intent.category.DEFAULT" />
                    <data android:scheme="file"/>
                    <!-- 允许所有类型文件-->
                    <data android:mimeType="*/*" />
                    <!-- 只允许图片文件-->
                    <!--<data android:mimeType="image/*"/>-->
                </intent-filter>
    复制代码

    获取uri

     //获取uri
                Intent intent = getIntent();
                Uri  uri = intent.getData();
                String  url = intent.getDataString();
                Log.e("url", url);

    将uri转为文件路径

    复制代码
    /**
         * 根据Uri获取文件的绝对路径,解决Android4.4以上版本Uri转换
         *
         * @param fileUri
         */
        @TargetApi(19)
        public static String getPathFormUri(Activity context, Uri fileUri) {
            if (context == null || fileUri == null)
                return null;
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT && DocumentsContract.isDocumentUri(context, fileUri)) {
                if (isExternalStorageDocument(fileUri)) {
                    String docId = DocumentsContract.getDocumentId(fileUri);
                    String[] split = docId.split(":");
                    String type = split[0];
                    if ("primary".equalsIgnoreCase(type)) {
                        return Environment.getExternalStorageDirectory() + "/" + split[1];
                    }
                } else if (isDownloadsDocument(fileUri)) {
                    String id = DocumentsContract.getDocumentId(fileUri);
                    try {
                        long ID = Long.parseLong(id);
                        Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), ID);
                        return getDataColumn(context, contentUri, null, null);
                    } catch (Exception e) {
                        if (id.startsWith("raw:")) {
                            final String path = id.replaceFirst("raw:", "");
                            return path;
                        }
                    }
    
                } else if (isMediaDocument(fileUri)) {
                    String docId = DocumentsContract.getDocumentId(fileUri);
                    String[] split = docId.split(":");
                    String type = split[0];
                    Uri contentUri = null;
                    if ("image".equals(type)) {
                        contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
                    } else if ("video".equals(type)) {
                        contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
                    } else if ("audio".equals(type)) {
                        contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
                    }
                    String selection = MediaStore.Images.Media._ID + "=?";
                    String[] selectionArgs = new String[]{split[1]};
                    return getDataColumn(context, contentUri, selection, selectionArgs);
                }
            } // MediaStore (and general)
            else if ("content".equalsIgnoreCase(fileUri.getScheme())) {
                // Return the remote address
                if (isGooglePhotosUri(fileUri))
                    return fileUri.getLastPathSegment();
                return getDataColumn(context, fileUri, null, null);
            }
            // File
            else if ("file".equalsIgnoreCase(fileUri.getScheme())) {
                return fileUri.getPath();
            }
            return null;
        }
    
        /**
         * Android4.4 (<19)以下版本获取uri地址方法
         *
         * @param context       上下文
         * @param uri           返回的uri
         * @param selection     条件
         * @param selectionArgs 值
         * @return uri文件所在的路径
         */
        public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) {
            Cursor cursor = null;
            String[] projection = {MediaStore.Images.Media.DATA};
            try {
                cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null);
                if (cursor != null && cursor.moveToFirst()) {
                    int index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                    return cursor.getString(index);
                }
            } finally {
                if (cursor != null)
                    cursor.close();
            }
            return null;
        }
    
        /**
         * @param uri The Uri to check.
         * @return URI权限是否为ExternalStorageProvider
         * Whether the Uri authority is ExternalStorageProvider.
         */
        public static boolean isExternalStorageDocument(Uri uri) {
            return "com.android.externalstorage.documents".equals(uri.getAuthority());
        }
    
        /**
         * @param uri The Uri to check.
         * @return URI权限是否为google图片
         * Whether the Uri authority is Google Photos.
         */
        public static boolean isGooglePhotosUri(Uri uri) {
            return "com.google.android.apps.photos.content".equals(uri.getAuthority());
        }
    
        /**
         * @param uri The Uri to check.
         * @return URI权限是否为DownloadsProvider.
         * Whether the Uri authority is DownloadsProvider.
         */
        public static boolean isDownloadsDocument(Uri uri) {
            return "com.android.providers.downloads.documents".equals(uri.getAuthority());
        }
    
        /**
         * @param uri The Uri to check.
         * @return URI权限是否为MediaProvider.
         * Whether the Uri authority is MediaProvider.
         */
        public static boolean isMediaDocument(Uri uri) {
            return "com.android.providers.media.documents".equals(uri.getAuthority());
        }
  • 相关阅读:
    uip UDPclient模式通信移植,p本地ort可以是无规
    正则表达式摘要
    Regular expression
    正则-合乎规则
    通配符-通配
    正则表达式总结
    判断大盘筑顶的方法
    筑顶和下跌规律
    股票的筑顶危险信号
    股票筑顶的基本特征
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/15714128.html
Copyright © 2011-2022 走看看