تبلیغات
تبلیغات
تبلیغات
تبلیغات

Screen Shot And Share در اندروید 8
(1 مشاهده) (1) مهمان
  • صفحه:
  • 1

موضوع: Screen Shot And Share در اندروید 8

Screen Shot And Share در اندروید 8 1 هفته, 6 روز پیش #140549

  • r.mphtaram
  • آفلاین
  • کاربر همیشگی سایت
  • ارسال: 117
  • دریافت تشكر: 25
  • 
سلام کسی اسکرین شات در اندروید 8 به بالا انجام داده
من این کد پایین و دارم که برای اندروید 7 و پایین تر کار میکنه
و هر بار اپ رو میفرستم کافه بازار گیر میدن که این دکمه ات کار نمیکنه و پشتیبانی کافه بازار میزنه گوشی تست اندروید 8


using UnityEngine;
using System.IO;
using System.Collections;

// ----------------------
// Author : Soundpiercer
// 
 آدرس ایمیل جهت جلوگیری از رباتهای هرزنامه محافظت شده اند، جهت مشاهده آنها شما نیاز به فعال ساختن جاوا اسکریپت دارید
 
// ----------------------

/// <summary>
/// A Class that captures the screen and invoke Social Share Event in Android Environment.
/// It won't work on Unity Editor. 
/// </summary>

public class ScreenShotAndShare : MonoBehaviour
{
    public public_link pl;
    public Transform panel_shotscreen;
    private bool _isProcessing = false;
    private bool _isFocus = false;
    public void Share()
    {

        if (!_isProcessing && !Application.isEditor)
        {
             StartCoroutine(ShareScreenshot("بازی",  " نبرد  "  + "\n" + "دانلود" + "\n" +pl.address_download));
        }
    }

    private IEnumerator ShareScreenshot(string popupMessage, string shareMessage)
    {
        _isProcessing = true;
        panel_shotscreen.gameObject.SetActive(false);
        yield return new WaitForEndOfFrame();

        ScreenCapture.CaptureScreenshot("screenshot.png", 2); // Unity 2017 or upper
        // Application.CaptureScreenshot("screenshot.png", 2); // Unity 5
        string filePath = Path.Combine(Application.persistentDataPath, "screenshot.png");

        yield return new WaitForSecondsRealtime(0.3f);

        // The Sharing Process varies by each Android Device's OS Level. 
        var apiInfo = new AndroidJavaClass("android.os.Build$VERSION");
        var apiLevel = apiInfo.GetStatic<int>("SDK_INT");


        if (apiLevel > 25) // Android 7.1 Nougat ~ 
        {
            yield return StartCoroutine(AndroidOreoShareEnumerator(filePath, popupMessage, shareMessage));
        }
        else // ~ Android 7.0 Nougat
        {
            yield return StartCoroutine(AndroidNougatShareEnumerator(filePath, popupMessage, shareMessage));
        }

        // won't proceed until the app restores its focus
        yield return new WaitUntil(() => _isFocus);
        // End
        _isProcessing = false;
        panel_shotscreen.gameObject.SetActive(true);
        yield break;
    }


    private IEnumerator AndroidNougatShareEnumerator(string path, string popupMessage, string shareMessage)
    {
        // Set Events (Unity)
        AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");

        // Set Events (Android)
        AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent");
        AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent");

        intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND"));

        // Set Text Message
        intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TEXT"), shareMessage);

        // Set Image
        AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");
        AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("parse", "file://" + path);

        intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_STREAM"), uriObject);
        intentObject.Call<AndroidJavaObject>("setType", "image/png");

        // START!
        AndroidJavaObject chooser = intentClass.CallStatic<AndroidJavaObject>("createChooser", intentObject, popupMessage);
        currentActivity.Call("startActivity", chooser);

        yield return new WaitForSecondsRealtime(1.0f);
    }

    /// <summary>
    /// Sharing Process (API Level 25 ~)
    /// </summary>
    /// <param name="path">Image path.</param>
    private IEnumerator AndroidOreoShareEnumerator(string path, string popupMessage, string shareMessage)
    {
        // Set Events (Unity)
        AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");

        // Set Events (Android)
        AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent");
        AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent");

        intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND"));

        // Set Text Message
        intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TEXT"), shareMessage);

        // Set Image
        AndroidJavaClass uriClass = new AndroidJavaClass("android.support.v4.content.FileProvider");
        AndroidJavaClass fileClass = new AndroidJavaClass("java.io.File");

        AndroidJavaObject fileObject = new AndroidJavaObject("java.io.File", path);
        AndroidJavaObject stringObject = new AndroidJavaObject("java.lang.String", "com.Colortronics.SliteDev.share.fileprovider");

        AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("getUriForFile", currentActivity, stringObject, fileObject);

        intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_STREAM"), uriObject);
        intentObject.Call<AndroidJavaObject>("setType", "image/png");

        // START!
        AndroidJavaObject chooser = intentClass.CallStatic<AndroidJavaObject>("createChooser", intentObject, popupMessage);
        currentActivity.Call("startActivity", chooser);

        yield return new WaitForSecondsRealtime(1.0f);
    }

    private void OnApplicationFocus(bool focus)
    {
        _isFocus = focus;
    }
}

پاسخ: Screen Shot And Share در اندروید 8 1 هفته, 2 روز پیش #140581

  • Jinjer
  • آفلاین
  • کاربر تازه وارد
  • ارسال: 13
  • دریافت تشكر: 10
نمی دونم کدوم نسخه یونیتی رو استفاده می کنی ولی احتمالا این متد رو داشته باشه که دردسر کد جاوا دیگه نداری:
docs.unity3d.com/ScriptReference/ScreenCapture.html

ScreenCapture.CaptureScreenshot("ScreenCapture");

روی موبایل یه فایل png ذخیره میشه به اسم ScreenCapture که توی مسیر Application.persistentDataPath میتونی پیداش کنی.

اگر همون لحظه بخوای استفاده کنی این متد هم داره:
var texture = ScreenCapture.CaptureScreenshotAsTexture();

که بهت یه آبجکت از نوع Texture2D برمیگردونه که بتونی داخل بازی هم استفاده کنی.
آخرین ویرایش: 1 هفته, 2 روز پیش ارسال توسط Jinjer.
  • صفحه:
  • 1
زمان ایجاد صفحه: 0.13 ثانیه

جدیدترین آثار ارسالی در گالری

تبلیغات
تبلیغات

جدیدترین ارسالهای تالارگفتگو