استبعاد أنواع الأنشطة في المشاركة الأصلية المتفاعلة على Android

0

وفقًا للمستندات الأصلية المتفاعلة ، لا يتوفر استبعاد أنواع الأنشطة لوحدة المشاركة إلا على IOS - https://facebook.github.io/react-native/docs/share.html . أحاول استبعاد البريد الإلكتروني / الرسائل القصيرة لأغراض التحليلات. هل هناك طريقة للتحايل على هذا القيد أم أن هذا غير ممكن في Android؟

1 إجابة

1
افضل جواب

يمكن القيام بذلك باستخدام وحدة نمطية أصلية متفاعلة. ضع في اعتبارك أن استخدام هذا الحل يتطلب أن يكون لديك كلمة أساسية لاسم حزمة التطبيق الذي تريد استبعاده.

هنا هي وحدتي الأم:

package com.testproject;

import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.ResolveInfo;
import android.os.Parcelable;
import android.util.Log;

import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableArray;

import java.util.ArrayList;
import java.util.List;

public class ShareModule extends ReactContextBaseJavaModule {

    public ShareModule(ReactApplicationContext reactContext) {
        super(reactContext);
    }

    @Override
    public String getName() {
        return "ShareExample";
    }

    private static boolean containsOneWord(String word, ReadableArray keywords) {
        for (int i = 0; i < keywords.size(); i++)
            if (word.contains(keywords.getString(i))) return true;
        return false;
    }

    @ReactMethod
    public void share(String subject, String message, ReadableArray toExclude) {

        List<Intent> shareIntentsLists = new ArrayList<Intent>();
        Intent shareIntent = new Intent();
        shareIntent.setAction(Intent.ACTION_SEND);
        shareIntent.setType("text/plain");
        shareIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
        shareIntent.putExtra(Intent.EXTRA_TEXT, message);
        List<ResolveInfo> resInfos = getCurrentActivity().getPackageManager().queryIntentActivities(shareIntent, 0);
        if (!resInfos.isEmpty()) {
            for (ResolveInfo resInfo : resInfos) {
                String packageName = resInfo.activityInfo.packageName;
                if (!containsOneWord(packageName.toLowerCase(), toExclude)) {
                    Intent intent = new Intent();
                    intent.setComponent(new ComponentName(packageName, resInfo.activityInfo.name));
                    intent.setAction(Intent.ACTION_SEND);
                    intent.setType("text/plain");
                    intent.putExtra(Intent.EXTRA_SUBJECT, subject);
                    intent.putExtra(Intent.EXTRA_TEXT, message);
                    intent.setPackage(packageName);
                    shareIntentsLists.add(intent);
                }
            }
            if (!shareIntentsLists.isEmpty()) {
                Intent chooserIntent = Intent.createChooser(shareIntentsLists.remove(0), "Choose app to share");
                chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, shareIntentsLists.toArray(new Parcelable[]{}));
                getCurrentActivity().startActivity(chooserIntent);
            } else
                Log.e("Error", "No Apps can perform your task");

        }

    }
}

هذه هي الطريقة التي ستستخدمها:

import { NativeModules } from 'react-native';

NativeModules.ShareExample.share('Hi', 'Hello world', ['mms', 'sms', 'messa', 'gm', 'mail', 'text']);

ضع في اعتبارك أن الرسائل القصيرة وتطبيقات البريد الإلكتروني المختلفة قد لا تحتوي على كلمات رئيسية مشتركة ، لذا قم بتضمينها قدر الإمكان.

للحصول على تعليمات حول كيفية إضافة وحدة نمطية أصلية تحقق من الوثائق الأصلية المتفاعلة هنا .

المراجع:

:مؤلف
فوق
قائمة طعام