android.content.res.AssetFileDescriptor#createInputStream()源码实例Demo

下面列出了android.content.res.AssetFileDescriptor#createInputStream() 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: flutter_sms   文件: ContactPhotoQuery.java
@TargetApi(Build.VERSION_CODES.ECLAIR)
private void queryContactPhoto() {
  Uri uri = Uri.withAppendedPath(ContactsContract.AUTHORITY_URI, photoUri);

  try {
    AssetFileDescriptor fd = registrar.context().getContentResolver().openAssetFileDescriptor(
        uri, "r");
    if (fd != null) {
      InputStream stream = fd.createInputStream();
      byte[] bytes = getBytesFromInputStream(stream);
      stream.close();
      result.success(bytes);
    }
  } catch (IOException e) {
    e.printStackTrace();
  }
}
 
private static InputStream getInputStreamForVirtualFile(Context context, Uri uri)
        throws IOException {

    ContentResolver resolver = context.getContentResolver();

    String[] openableMimeTypes = resolver.getStreamTypes(uri, "*/*");

    if (openableMimeTypes == null ||
            openableMimeTypes.length < 1) {
        throw new FileNotFoundException();
    }

    AssetFileDescriptor assetFileDescriptor = resolver.openAssetFileDescriptor(uri, openableMimeTypes[0], null);
    if (assetFileDescriptor == null) {
        throw new IOException("open virtual file failed");
    }
    return assetFileDescriptor.createInputStream();
}
 
源代码3 项目: Zom-Android-XMPP   文件: SystemServices.java
public static FileInfo getContactAsVCardFile(Context context, Uri uri) {
    AssetFileDescriptor fd;
    try {
        fd = context.getContentResolver().openAssetFileDescriptor(uri, "r");
        java.io.FileInputStream in = fd.createInputStream();
        byte[] buf = new byte[(int) fd.getDeclaredLength()];
        in.read(buf);
        in.close();
        String vCardText = new String(buf);
        Log.d("Vcard", vCardText);
        List<String> pathSegments = uri.getPathSegments();
        String targetPath = "/" + pathSegments.get(pathSegments.size() - 1) + ".vcf";
        SecureMediaStore.copyToVfs(buf, targetPath);
        FileInfo info = new FileInfo();
        info.stream = new info.guardianproject.iocipher.FileInputStream(SecureMediaStore.vfsUri(targetPath).getPath());
        info.type = "text/vcard";
        return info;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
 
private byte[] loadBytes() {
  try {
    AssetFileDescriptor assetFileDescriptor = getAssets().openFd("lite_template/card.wasm");
    long len = assetFileDescriptor.getDeclaredLength();
    ByteBuffer buf = ByteBuffer.allocate((int) len);
    InputStream json = assetFileDescriptor.createInputStream();
    json.read(buf.array());
    json.close();
    return buf.array();
  } catch (IOException e) {
    e.printStackTrace();
  }
  return null;
}
 
源代码5 项目: AndroidComponentPlugin   文件: ContentResolver.java
/**
 * Open a stream on to the content associated with a content URI.  If there
 * is no data associated with the URI, FileNotFoundException is thrown.
 *
 * <h5>Accepts the following URI schemes:</h5>
 * <ul>
 * <li>content ({@link #SCHEME_CONTENT})</li>
 * <li>android.resource ({@link #SCHEME_ANDROID_RESOURCE})</li>
 * <li>file ({@link #SCHEME_FILE})</li>
 * </ul>
 *
 * <p>See {@link #openAssetFileDescriptor(Uri, String)} for more information
 * on these schemes.
 *
 * @param uri The desired URI.
 * @return InputStream
 * @throws FileNotFoundException if the provided URI could not be opened.
 * @see #openAssetFileDescriptor(Uri, String)
 */
public final @Nullable InputStream openInputStream(@NonNull Uri uri)
        throws FileNotFoundException {
    Preconditions.checkNotNull(uri, "uri");
    String scheme = uri.getScheme();
    if (SCHEME_ANDROID_RESOURCE.equals(scheme)) {
        // Note: left here to avoid breaking compatibility.  May be removed
        // with sufficient testing.
        OpenResourceIdResult r = getResourceId(uri);
        try {
            InputStream stream = r.r.openRawResource(r.id);
            return stream;
        } catch (Resources.NotFoundException ex) {
            throw new FileNotFoundException("Resource does not exist: " + uri);
        }
    } else if (SCHEME_FILE.equals(scheme)) {
        // Note: left here to avoid breaking compatibility.  May be removed
        // with sufficient testing.
        return new FileInputStream(uri.getPath());
    } else {
        AssetFileDescriptor fd = openAssetFileDescriptor(uri, "r", null);
        try {
            return fd != null ? fd.createInputStream() : null;
        } catch (IOException e) {
            throw new FileNotFoundException("Unable to create stream");
        }
    }
}
 
源代码6 项目: AndroidComponentPlugin   文件: ContentResolver.java
/**
 * Open a stream on to the content associated with a content URI.  If there
 * is no data associated with the URI, FileNotFoundException is thrown.
 *
 * <h5>Accepts the following URI schemes:</h5>
 * <ul>
 * <li>content ({@link #SCHEME_CONTENT})</li>
 * <li>android.resource ({@link #SCHEME_ANDROID_RESOURCE})</li>
 * <li>file ({@link #SCHEME_FILE})</li>
 * </ul>
 *
 * <p>See {@link #openAssetFileDescriptor(Uri, String)} for more information
 * on these schemes.
 *
 * @param uri The desired URI.
 * @return InputStream
 * @throws FileNotFoundException if the provided URI could not be opened.
 * @see #openAssetFileDescriptor(Uri, String)
 */
public final @Nullable InputStream openInputStream(@NonNull Uri uri)
        throws FileNotFoundException {
    Preconditions.checkNotNull(uri, "uri");
    String scheme = uri.getScheme();
    if (SCHEME_ANDROID_RESOURCE.equals(scheme)) {
        // Note: left here to avoid breaking compatibility.  May be removed
        // with sufficient testing.
        OpenResourceIdResult r = getResourceId(uri);
        try {
            InputStream stream = r.r.openRawResource(r.id);
            return stream;
        } catch (Resources.NotFoundException ex) {
            throw new FileNotFoundException("Resource does not exist: " + uri);
        }
    } else if (SCHEME_FILE.equals(scheme)) {
        // Note: left here to avoid breaking compatibility.  May be removed
        // with sufficient testing.
        return new FileInputStream(uri.getPath());
    } else {
        AssetFileDescriptor fd = openAssetFileDescriptor(uri, "r", null);
        try {
            return fd != null ? fd.createInputStream() : null;
        } catch (IOException e) {
            throw new FileNotFoundException("Unable to create stream");
        }
    }
}
 
源代码7 项目: android_9.0.0_r45   文件: ContentResolver.java
/**
 * Open a stream on to the content associated with a content URI.  If there
 * is no data associated with the URI, FileNotFoundException is thrown.
 *
 * <h5>Accepts the following URI schemes:</h5>
 * <ul>
 * <li>content ({@link #SCHEME_CONTENT})</li>
 * <li>android.resource ({@link #SCHEME_ANDROID_RESOURCE})</li>
 * <li>file ({@link #SCHEME_FILE})</li>
 * </ul>
 *
 * <p>See {@link #openAssetFileDescriptor(Uri, String)} for more information
 * on these schemes.
 *
 * @param uri The desired URI.
 * @return InputStream
 * @throws FileNotFoundException if the provided URI could not be opened.
 * @see #openAssetFileDescriptor(Uri, String)
 */
public final @Nullable InputStream openInputStream(@NonNull Uri uri)
        throws FileNotFoundException {
    Preconditions.checkNotNull(uri, "uri");
    String scheme = uri.getScheme();
    if (SCHEME_ANDROID_RESOURCE.equals(scheme)) {
        // Note: left here to avoid breaking compatibility.  May be removed
        // with sufficient testing.
        OpenResourceIdResult r = getResourceId(uri);
        try {
            InputStream stream = r.r.openRawResource(r.id);
            return stream;
        } catch (Resources.NotFoundException ex) {
            throw new FileNotFoundException("Resource does not exist: " + uri);
        }
    } else if (SCHEME_FILE.equals(scheme)) {
        // Note: left here to avoid breaking compatibility.  May be removed
        // with sufficient testing.
        return new FileInputStream(uri.getPath());
    } else {
        AssetFileDescriptor fd = openAssetFileDescriptor(uri, "r", null);
        try {
            return fd != null ? fd.createInputStream() : null;
        } catch (IOException e) {
            throw new FileNotFoundException("Unable to create stream");
        }
    }
}
 
源代码8 项目: GetApk   文件: FileUtil.java
public static void copy(ContentResolver resolver, Uri source, Uri dest, OnCopyListener listener) throws IOException {

        FileInputStream in = null;
        OutputStream out = null;
        try{
            AssetFileDescriptor fd = resolver.openAssetFileDescriptor(source, "r");
            in =  fd != null ? fd.createInputStream() : null;

            if (in == null){
                throw new IOException("open the src file failed");
            }
            long total = fd.getLength();
            long sum = 0;

            out = resolver.openOutputStream(dest);

            if (out == null) {
                throw new IOException("open the dest file failed");
            }
            // Transfer bytes from in to out
            byte[] buf = new byte[1024 * 4];
            int len;
            Thread thread = Thread.currentThread();
            while ((len = in.read(buf)) > 0) {
                if (thread.isInterrupted()) {
                    break;
                }
                sum += len;
                out.write(buf, 0, len);
                if (listener != null) {
                    listener.inProgress(sum * 1.0f / total);
                }
            }
        }finally {
            IOUtil.closeQuiet(in);
            IOUtil.closeQuiet(out);
        }
    }
 
源代码9 项目: SafeContentResolver   文件: SafeContentResolver.java
/**
 * Open a stream to the content associated with a URI.
 *
 * <p>
 * If the provided URI is not a {@code file://} URI, {@link ContentResolver#openInputStream(Uri)} is used to open a
 * stream. If it is a {@code file://}, this method makes sure the file isn't owned by this app.
 * </p>
 *
 * @param uri
 *         The URI pointing to the content to access.
 *
 * @return {@code InputStream} to access the content.
 *
 * @throws FileNotFoundException
 *         If the provided URI could not be opened or if it points to a file owned by this app.
 */
@Nullable
public InputStream openInputStream(@NotNull Uri uri) throws FileNotFoundException {
    //noinspection ConstantConditions
    if (uri == null) {
        throw new NullPointerException("Argument 'uri' must not be null");
    }

    String scheme = uri.getScheme();
    if (ContentResolver.SCHEME_CONTENT.equals(scheme)) {
        String authority = uri.getAuthority();
        if (disallowedProviders.isDisallowed(authority)) {
            throw new FileNotFoundException("content URI is owned by the application itself. " +
                    "Content provider is not explicitly allowed: " + authority);
        }
    }

    if (!ContentResolver.SCHEME_FILE.equals(scheme)) {
        return contentResolver.openInputStream(uri);
    }

    File file = new File(uri.getPath());
    ParcelFileDescriptor parcelFileDescriptor = ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY);
    FileDescriptor fileDescriptor = parcelFileDescriptor.getFileDescriptor();

    int fileUid = getFileUidOrThrow(fileDescriptor);
    if (fileUid == android.os.Process.myUid()) {
        throw new FileNotFoundException("File is owned by the application itself");
    }

    AssetFileDescriptor fd = new AssetFileDescriptor(parcelFileDescriptor, 0, -1);
    try {
        return fd.createInputStream();
    } catch (IOException e) {
        throw new FileNotFoundException("Unable to create stream");
    }
}
 
源代码10 项目: android-testdpc   文件: ProfileOwnerService.java
@Override
public boolean installCaCertificate(AssetFileDescriptor afd) {
    try (FileInputStream fis = afd.createInputStream()) {
        return Util.installCaCertificate(fis, mDpm, DeviceAdminReceiver.getComponentName(
                mContext));
    } catch (IOException e) {
        Log.e(TAG, "Unable to install a certificate", e);
        return false;
    }
}
 
源代码11 项目: fresco   文件: LocalContentUriFetchProducer.java
@Override
protected EncodedImage getEncodedImage(ImageRequest imageRequest) throws IOException {
  Uri uri = imageRequest.getSourceUri();
  if (UriUtil.isLocalContactUri(uri)) {
    final InputStream inputStream;
    if (uri.toString().endsWith("/photo")) {
      inputStream = mContentResolver.openInputStream(uri);
    } else if (uri.toString().endsWith("/display_photo")) {
      try {
        AssetFileDescriptor fd = mContentResolver.openAssetFileDescriptor(uri, "r");
        inputStream = fd.createInputStream();
      } catch (IOException e) {
        throw new IOException("Contact photo does not exist: " + uri);
      }
    } else {
      inputStream = ContactsContract.Contacts.openContactPhotoInputStream(mContentResolver, uri);
      if (inputStream == null) {
        throw new IOException("Contact photo does not exist: " + uri);
      }
    }
    // If a Contact URI is provided, use the special helper to open that contact's photo.
    return getEncodedImage(inputStream, EncodedImage.UNKNOWN_STREAM_SIZE);
  }

  if (UriUtil.isLocalCameraUri(uri)) {
    EncodedImage cameraImage = getCameraImage(uri);
    if (cameraImage != null) {
      return cameraImage;
    }
  }

  return getEncodedImage(mContentResolver.openInputStream(uri), EncodedImage.UNKNOWN_STREAM_SIZE);
}
 
源代码12 项目: NotificationPeekPort   文件: ContactHelper.java
/**
 * Get the InputStream object of the contact photo with given contact ID.
 *
 * @param context       Context object of the caller.
 * @param contactId     Contact ID.
 * @return              InputStream object of the contact photo.
 */
public static InputStream openDisplayPhoto(Context context, long contactId) {
    Uri contactUri =
            ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId);
    Uri displayPhotoUri =
            Uri.withAppendedPath(contactUri, ContactsContract.Contacts.Photo.DISPLAY_PHOTO);
    try {
        AssetFileDescriptor fd =
                context.getContentResolver().openAssetFileDescriptor(displayPhotoUri, "r");
        return fd.createInputStream();
    } catch (IOException e) {
        return null;
    }
}
 
源代码13 项目: MusicPlayer   文件: CheapAMR.java
public void readFile(Uri inputFile)
        throws java.io.FileNotFoundException,
        java.io.IOException {
    super.readFile(inputFile);
    mNumFrames = 0;
    mMaxFrames = 64;  // This will grow as needed
    mFrameGains = new int[mMaxFrames];
    mMinGain = 1000000000;
    mMaxGain = 0;
    mBitRate = 10;
    mOffset = 0;

    InputStream stream = null;
    AssetFileDescriptor file;
    file = App.getInstance().getContentResolver().openAssetFileDescriptor(inputFile, "r");

    if(file == null) throw  new NullPointerException("File is null");

    stream = file.createInputStream();
    if(stream == null) throw new NullPointerException("Input stream is null");

    else Log.d("audioSeekbar", "ReadFile: input stream is not null");

    // No need to handle filesizes larger than can fit in a 32-bit int
    mFileSize = (int) file.getLength();

    if (mFileSize < 128) {
        throw new java.io.IOException("File too small to parse");
    }

    byte[] header = new byte[12];
    stream.read(header, 0, 6);
    mOffset += 6;
    if (header[0] == '#' &&
            header[1] == '!' &&
            header[2] == 'A' &&
            header[3] == 'M' &&
            header[4] == 'R' &&
            header[5] == '\n') {
        parseAMR(stream, mFileSize - 6);
    }

    stream.read(header, 6, 6);
    mOffset += 6;

    if (header[4] == 'f' &&
            header[5] == 't' &&
            header[6] == 'y' &&
            header[7] == 'p' &&
            header[8] == '3' &&
            header[9] == 'g' &&
            header[10] == 'p' &&
            header[11] == '4') {

        int boxLen =
                ((0xff & header[0]) << 24) |
                        ((0xff & header[1]) << 16) |
                        ((0xff & header[2]) << 8) |
                        ((0xff & header[3]));

        if (boxLen >= 4 && boxLen <= mFileSize - 8) {
            stream.skip(boxLen - 12);
            mOffset += boxLen - 12;
        }

        parse3gpp(stream, mFileSize - boxLen);
    }
}
 
源代码14 项目: MusicPlayer   文件: CheapWAV.java
public void readFile(Uri inputFile) throws java.io.IOException {
    super.readFile(inputFile);

    InputStream stream = null;
    AssetFileDescriptor file;
    file = App.getInstance().getContentResolver().openAssetFileDescriptor(inputFile, "r");

    if(file == null) throw  new NullPointerException("File is null");

    stream = file.createInputStream();
    if(stream == null) throw new NullPointerException("Input stream is null");

    else Log.d("audioSeekbar", "ReadFile: input stream is not null");

    // No need to handle filesizes larger than can fit in a 32-bit int
    mFileSize = (int) file.getLength();

    if (mFileSize < 128) {
        throw new java.io.IOException("File too small to parse");
    }
    try {
        WavFileDescriptor wavFile = WavFileDescriptor.openWavFile(file);
        mNumFrames = (int) (wavFile.getNumFrames() / getSamplesPerFrame());
        mFrameGains = new int[mNumFrames];
        mSampleRate = (int) wavFile.getSampleRate();
        mChannels = wavFile.getNumChannels();

        int gain, value;
        int[] buffer = new int[getSamplesPerFrame()];
        for (int i = 0; i < mNumFrames; i++) {
            gain = -1;
            wavFile.readFrames(buffer, getSamplesPerFrame());
            for (int j = 0; j < getSamplesPerFrame(); j++) {
                value = buffer[j];
                if (gain < value) {
                    gain = value;
                }
            }
            mFrameGains[i] = (int) Math.sqrt(gain);
            if (mProgressListener != null) {
                boolean keepGoing = mProgressListener.reportProgress(i * 1.0 / mFrameGains.length);
                if (!keepGoing) {
                    break;
                }
            }
        }
        if (wavFile != null) {
            wavFile.close();
        }
    } catch (WavFileException e) {
        Log.e(TAG, "Exception while reading wav file", e);
    }
}
 
源代码15 项目: MusicPlayer   文件: CheapAAC.java
public void readFile(Uri inputFile)
        throws java.io.FileNotFoundException,
        java.io.IOException {
    super.readFile(inputFile);
    mChannels = 0;
    mSampleRate = 0;
    mBitrate = 0;
    mSamplesPerFrame = 0;
    mNumFrames = 0;
    mMinGain = 255;
    mMaxGain = 0;
    mOffset = 0;
    mMdatOffset = -1;
    mMdatLength = -1;

    mAtomMap = new HashMap<Integer, Atom>();

    InputStream stream = null;
    AssetFileDescriptor file;
    file = App.getInstance().getContentResolver().openAssetFileDescriptor(inputFile, "r");

    if(file == null) throw  new NullPointerException("File is null");

    // Read the first 8 bytes
    stream = file.createInputStream();
    if(stream == null) throw new NullPointerException("Input stream is null");

    else Log.d("audioSeekbar", "ReadFile: input stream is not null");

    // No need to handle filesizes larger than can fit in a 32-bit int
    mFileSize = (int) file.getLength();

    if (mFileSize < 128) {
        throw new java.io.IOException("File too small to parse");
    }

    byte[] header = new byte[8];
    stream.read(header, 0, 8);

    if (header[0] == 0 &&
            header[4] == 'f' &&
            header[5] == 't' &&
            header[6] == 'y' &&
            header[7] == 'p') {
        // Create a new stream, reset to the beginning of the file
        stream = file.createInputStream();
        parseMp4(stream, mFileSize);
    } else {
        throw new java.io.IOException("Unknown file format");
    }

    if (mMdatOffset > 0 && mMdatLength > 0) {
        stream = file.createInputStream();
        stream.skip(mMdatOffset);
        mOffset = mMdatOffset;
        parseMdat(stream, mMdatLength);
    } else {
        throw new java.io.IOException("Didn't find mdat");
    }

    boolean bad = false;
    for (int requiredAtomType : kRequiredAtoms) {
        if (!mAtomMap.containsKey(requiredAtomType)) {
            System.out.println("Missing atom: " +
                    atomToString(requiredAtomType));
            bad = true;
        }
    }

    if (bad) {
        throw new java.io.IOException("Could not parse MP4 file");
    }
}