簡體   English   中英

我的 android 應用程序在共享 gif 時崩潰

[英]My android app crashes while sharing a gif

我創建了一個模因共享應用程序,它在圖像視圖中從 Reddit 中獲取隨機模因,用戶可以選擇通過其他應用程序共享模因。 共享功能適用於 jpg、png 等文件類型,gif 除外。 gif 出現在 imageView 中,但是一旦我單擊共享按鈕,應用程序就會崩潰 這只發生在 gif 文件類型中

我的分享功能代碼。 函數名稱是shareMeme

private void shareImageandText(Bitmap bitmap) {
        Uri uri = getmageToShare(bitmap);
        Intent intent = new Intent(Intent.ACTION_SEND);

        // putting uri of image to be shared
        intent.putExtra(Intent.EXTRA_STREAM, uri);

        // adding text to share
        intent.putExtra(Intent.EXTRA_TEXT, "Hey! Checkout this cool meme on Reddit");

        // Add subject Here
        intent.putExtra(Intent.EXTRA_SUBJECT, "Try Meme Lelo");

        // setting type to image
        intent.setType("image/*");

        // calling startactivity() to share
        startActivity(Intent.createChooser(intent, "Share Via"));
    }

    // Retrieving the url to share
    private Uri getmageToShare(Bitmap bitmap) {
        File imagefolder = new File(getCacheDir(), "images");
        Uri uri = null;
        try {
            imagefolder.mkdirs();
            File file = new File(imagefolder, "shared_image.png");
            FileOutputStream outputStream = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.PNG, 90, outputStream);
            outputStream.flush();
            outputStream.close();
            uri = FileProvider.getUriForFile(this, "com.akki.memelelo.fileprovider", file);
        } catch (Exception e) {
            Toast.makeText(this, "" + e.getMessage(), Toast.LENGTH_LONG).show();
        }
        return uri;
    }


    public void shareMeme(View view) {
        BitmapDrawable bitmapDrawable = (BitmapDrawable) memeImageView.getDrawable();
        Bitmap bitmap = bitmapDrawable.getBitmap();
        shareImageandText(bitmap);
}

Logcat - 紅線錯誤消息

2021-07-02 15:04:26.238 9953-9953/com.akki.memelelo E/AndroidRuntime:致命異常:主進程:com.akki.memelelo,PID:9953 java.lang.IllegalStateException:無法為android執行方法:onClick 在 androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:414) 在 android.view.View.performClick(View.java:7448) 在 com.google.android.material.button.MaterialButton.performClick (MaterialButton.java:1119) 在 android.view.View.performClickInternal(View.java:7425) 在 android.view.View.access$3600(View.java:810) 在 android.view.View$PerformClick.run(View .java:28305) 在 android.os.Handler.handleCallback(Handler.java:938) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:223)在 android.app.ActivityThread.main(ActivityThread.java:7656) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)在 com.android.internal.os.Z ygoteInit.main(ZygoteInit.java:947) 引起:java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java :409) 在 android.view.View.performClick(View.java:7448) 在 com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119) 在 android.view.View.performClickInternal(View. java:7425) 在 android.view.View.access$3600(View.java:810) 在 android.view.View$PerformClick.run(View.java:28305) 在 android.os.Handler.handleCallback(Handler.java: 938) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:223) 在 android.app.ActivityThread.main(ActivityThread.java:7656) 在 java。 lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) ) 引起:java.lan g.ClassCastException: com.bumptech.glide.load.resource.gif.GifDrawable 無法轉換為 android.graphics.drawable.BitmapDrawable 在 com.akki.memelelo.MainActivity.shareMeme(MainActivity.java:148) at java.lang。 androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:409) at android.view.View.performClick(View.java:7448) at com.google.android 處的reflect.Method.invoke(Native Method)。 material.button.MaterialButton.performClick(MaterialButton.java:1119) at android.view.View.performClickInternal(View.java:7425) at android.view.View.access$3600(View.java:810) at android.view。 View$PerformClick.run(View.java:28305) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop (Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

2021-07-02 15:04:28.797 7519-7836/com.google.android.googlequicksearchbox E/sb.vuLiteSuggestSourc:設備精簡版提示模型加載錯誤。

2021-07-02 15:04:29.025 7519-7745/com.google.android.googlequicksearchbox E/MDD:DownloadProgressMonitor:找不到 uri 的文件組:android://com.google.android.googlequicksearchbox/files/ sharedminusonemodule/shared/SharedMinusOneData.pb.tmp

2021-07-02 15:06:49.119 207-211/? E/android.system.suspend@1.0-service:打開內核喚醒鎖統計信息時出錯:wakeup34:權限被拒絕2021-07-02 15:06:49.125 207-211/? E/android.system.suspend@1.0-service:打開內核喚醒鎖統計信息時出錯:wakeup35:權限被拒絕

BitmapDrawable bitmapDrawable = (BitmapDrawable) memeImageView.getDrawable();

在這里,您將 GifDrawable 轉換為 BitmapDrawable,這會導致崩潰。 為了獲取圖像(作為位圖對象),這是有效的,但您必須單獨處理 GIF。 可能檢查 ImageView 中加載的內容並相應地共享內容。

要共享 GIF,請將 GIF 保存在內部/外部存儲中並與以下人員共享其 URI:

"image/gif"

像這樣:

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("image/gif");
Uri uri = Uri.fromFile(sharingGifFile);
shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(shareIntent, "Share Emoji"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM