7
votes

Envoi de MMS Programmatiquement sur Android

J'ai un problème avec une tâche je suis censé faire, Je suis censé envoyer des MM en utilisant notre propre interface sur Android 2.1 afin que vous puissiez deviner appeler l'activité par défaut, c'est hors de la question. Donc, ma question, existe-t-il un moyen d'envoyer de manière programmative MMS à l'aide du SDK Android Sans appeler leur intention, J'ai essayé d'importer l'application MMS dans Eclipse, mais la plupart des classes sont com.google.android ce qui signifie qu'ils ne sont pas ouverts provenant, alors je ne sais pas comment les obtenir si possible, ou comment les imiter. Je pensais même à utiliser la réflexion pour les charger de Dalvik, mais je pense que ceci est un effort final et peut ne pas apporter des résultats.

Des idées?

BTW, j'ai trouvé

Comment envoyer une image via mms dans Android?

Envoi de MMS dans différents appareils Android

Mais ils ne fonctionnent pas .. (avec les classes exclusives)


2 commentaires

Lorsque vous dites "Activité par défaut" Que voulez-vous dire? Voulez-vous dire appeler l'application MMS directement?


Je fais quelque chose de similaire ici !!! Stackoverflow.com/Questtions/14452808/... < / a>


3 Réponses :


-9
votes
 private void sendSMS(String phoneNumber, String message)
    {        
        PendingIntent pi = PendingIntent.getActivity(this, 0,
            new Intent(this, SMS.class), 0);                
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phoneNumber, null, message, pi, null);        
    }    
}
try this

2 commentaires

Je pense qu'il parle de MMS, pas de SMS.


Bienvenue à Stackoverflow! Il est toujours préférable de fournir une brève description d'un exemple de code pour améliorer la précision post :)



1
votes

Bien que cette question soit laissée sans réponse pendant un moment, j'avais un peu trouvé un chemin à l'époque, j'ai juste oublié de poster. Cependant, j'ai eu l'application MMS d'origine et a demandé aux classes binaires et a ajouté les exigences correspondantes à la fin, car la plupart d'entre elles étaient privées dans le système de construction. La seule façon de faire un expéditeur MMS dans Android (que je connaisse) est de construire l'application avec l'arborescence source. De cette manière, vous aurez accès aux fonctions MMS restreintes et il est généralement très facile, car il y a un MMSManager dans la source, c'est que ce n'est pas public dans le SDK. Je sais que ma réponse est un peu vague, mais pour ceux d'entre vous descendant ce chemin .. Préparez-vous à quelques bosses sur la route .. :)


9 commentaires

Mec ... c'est un très vieux fil :) comme. Ce que je suggérerais, téléchargez la source et construisez votre application dans le dossier Applications afin qu'elle ait besoin de toutes les libs MMS dont il a besoin. Et vous pouvez copier le code de l'application MMS en termes de ce qu'il fait lorsqu'il envoie un MMS. Poster une nouvelle question et me donner le lien .. Et je vais aider si je peux


Avez-vous pu envoyer des images MMS avec les téléphones Samsung?


Oui, j'étais, c'était spécifique spécifique au système d'exploitation d'OS. Mais si vous construisez votre application dans la source, vous n'aurez pas à faire tout le "piratage sale" que j'ai fait. Vous pourrez simplement appeler tout ce qu'ils appellent envoi et cela fonctionnera comme un charme :)


Merci pour le conseil @tanndo. Pour le moment, je suis capable d'envoyer un MMS et de recevoir un ... Le problème que je suis confronté est en train de sauver le message dans ma boîte d'envoi ... Je suive: Maximbogatov.wordpress.com/2011/08/15/... < / a> qui n'est pas trop utile. aucun conseil?


Eh bien, je n'ai pas eu la nécessité de travailler avec elle depuis un moment, ce que je suggérerais d'obtenir la DB de l'émulateur, d'inspecter et d'entrer des données directement dans la base de données. Je crois que SMS / MMS utilise le même fournisseur de contenu et vous êtes autorisé à le lire / l'écrire.


Toute chance que vous puissiez négliger mon code d'insertion ... Voir ce qui ne va pas?


Aucun problème .. mais .. Je pense que vous devriez sortir de la section commentaires avec celle-là .. Peut-être même poster une nouvelle question et me donner l'URL à la question :)


Avez-vous un exemple de la construction de l'application avec l'arborescence source?


J'ai beaucoup de problèmes avec l'envoi de MMS. J'apprécierais vraiment que si vous pouviez m'aider! Stackoverflow.com/questions/47448316/cannot-send-mms



0
votes

Comme SMSManager, il y a quelque chose comme l'API MMSManager qui n'est pas exposé par Framework Android.

Pour envoyer d'abord MMS, vous devez acquérir MMS Netwotk, puis effectuer des appels HTTP. P>

/**
 * Run the MMS request.
 *
 * @param context the context to use
 * @param networkManager the MmsNetworkManager to use to setup MMS network
 * @param apnSettingsLoader the APN loader
 * @param carrierConfigValuesLoader the carrier config loader
 * @param userAgentInfoLoader the user agent info loader
 */



public void sendMms(final Context context, final MmsNetworkManager networkManager,
        final ApnSettingsLoader apnSettingsLoader,
        final CarrierConfigValuesLoader carrierConfigValuesLoader,
        final UserAgentInfoLoader userAgentInfoLoader) {
    Log.i(MmsService.TAG, "Execute " + this.getClass().getSimpleName());
    int result = SmsManager.MMS_ERROR_UNSPECIFIED;
    int httpStatusCode = 0;
    byte[] response = null;
    final Bundle mmsConfig = carrierConfigValuesLoader.get(MmsManager.DEFAULT_SUB_ID);
    if (mmsConfig == null) {
        Log.e(MmsService.TAG, "Failed to load carrier configuration values");
        result = SmsManager.MMS_ERROR_CONFIGURATION_ERROR;
    } else if (!loadRequest(context, mmsConfig)) {
        Log.e(MmsService.TAG, "Failed to load PDU");
        result = SmsManager.MMS_ERROR_IO_ERROR;
    } else {
        // Everything's OK. Now execute the request.
        try {
            // Acquire the MMS network
            networkManager.acquireNetwork();
            // Load the potential APNs. In most cases there should be only one APN available.
            // On some devices on which we can't obtain APN from system, we look up our own
            // APN list. Since we don't have exact information, we may get a list of potential
            // APNs to try. Whenever we found a successful APN, we signal it and return.
            final String apnName = networkManager.getApnName();
            final List<ApnSettingsLoader.Apn> apns = apnSettingsLoader.get(apnName);
            if (apns.size() < 1) {
                throw new ApnException("No valid APN");
            } else {
                Log.d(MmsService.TAG, "Trying " + apns.size() + " APNs");
            }
            final String userAgent = userAgentInfoLoader.getUserAgent();
            final String uaProfUrl = userAgentInfoLoader.getUAProfUrl();
            MmsHttpException lastException = null;
            for (ApnSettingsLoader.Apn apn : apns) {
                Log.i(MmsService.TAG, "Using APN ["
                        + "MMSC=" + apn.getMmsc() + ", "
                        + "PROXY=" + apn.getMmsProxy() + ", "
                        + "PORT=" + apn.getMmsProxyPort() + "]");
                try {
                    final String url = getHttpRequestUrl(apn);
                    // Request a global route for the host to connect
                    requestRoute(networkManager.getConnectivityManager(), apn, url);
                    // Perform the HTTP request
                    response = doHttp(
                            context, networkManager, apn, mmsConfig, userAgent, uaProfUrl);
                    // Additional check of whether this is a success
                    if (isWrongApnResponse(response, mmsConfig)) {
                        throw new MmsHttpException(0/*statusCode*/, "Invalid sending address");
                    }
                    // Notify APN loader this is a valid APN
                    apn.setSuccess();
                    result = Activity.RESULT_OK;
                    break;
                } catch (MmsHttpException e) {
                    Log.w(MmsService.TAG, "HTTP or network failure", e);
                    lastException = e;
                }
            }
            if (lastException != null) {
                throw lastException;
            }
        } catch (ApnException e) {
            Log.e(MmsService.TAG, "MmsRequest: APN failure", e);
            result = SmsManager.MMS_ERROR_INVALID_APN;
        } catch (MmsNetworkException e) {
            Log.e(MmsService.TAG, "MmsRequest: MMS network acquiring failure", e);
            result = SmsManager.MMS_ERROR_UNABLE_CONNECT_MMS;
        } catch (MmsHttpException e) {
            Log.e(MmsService.TAG, "MmsRequest: HTTP or network I/O failure", e);
            result = SmsManager.MMS_ERROR_HTTP_FAILURE;
            httpStatusCode = e.getStatusCode();
        } catch (Exception e) {
            Log.e(MmsService.TAG, "MmsRequest: unexpected failure", e);
            result = SmsManager.MMS_ERROR_UNSPECIFIED;
        } finally {
            // Release MMS network
            networkManager.releaseNetwork();
        }
    }
    // Process result and send back via PendingIntent
    returnResult(context, result, response, httpStatusCode);
}




/**
 * Request the route to the APN (either proxy host or the MMSC host)
 *
 * @param connectivityManager the ConnectivityManager to use
 * @param apn the current APN
 * @param url the URL to connect to
 * @throws MmsHttpException for unknown host or route failure
 */
private static void requestRoute(final ConnectivityManager connectivityManager,
        final ApnSettingsLoader.Apn apn, final String url) throws MmsHttpException {
    String host = apn.getMmsProxy();
    if (TextUtils.isEmpty(host)) {
        final Uri uri = Uri.parse(url);
        host = uri.getHost();
    }
    boolean success = false;
    // Request route to all resolved host addresses
    try {
        for (final InetAddress addr : InetAddress.getAllByName(host)) {
            final boolean requested = requestRouteToHostAddress(connectivityManager, addr);
            if (requested) {
                success = true;
                Log.i(MmsService.TAG, "Requested route to " + addr);
            } else {
                Log.i(MmsService.TAG, "Could not requested route to " + addr);
            }
        }
        if (!success) {
            throw new MmsHttpException(0/*statusCode*/, "No route requested");
        }
    } catch (UnknownHostException e) {
        Log.w(MmsService.TAG, "Unknown host " + host);
        throw new MmsHttpException(0/*statusCode*/, "Unknown host");
    }
}


0 commentaires