Java 类android.provider.Telephony.MmsSms 实例源码

项目:darksms    文件:PduPersister.java   
/**
 * Find all messages to be sent or downloaded before certain time.
 */
public Cursor getPendingMessages(long dueTime) {
    Uri.Builder uriBuilder = MessageDAO.MMS_PENDING_URI.buildUpon();
    uriBuilder.appendQueryParameter("protocol", "mms");

    String selection = PendingMessages.ERROR_TYPE + " < ?"
            + " AND " + PendingMessages.DUE_TIME + " <= ?";

    String[] selectionArgs = new String[] {
            String.valueOf(MmsSms.ERR_TYPE_GENERIC_PERMANENT),
            String.valueOf(dueTime)
    };

    return SqliteWrapper.query(mContext, mContentResolver,
            uriBuilder.build(), null, selection, selectionArgs,
            PendingMessages.DUE_TIME);
}
项目:qksms    文件:RetryScheduler.java   
private void markMmsFailedToSend(Context context, Uri msgUri) {
    // https://github.com/qklabs/aosp-messenger/blob/master/src/com/android/mms/data/WorkingMessage.java#L1476-1476

    try {
        PduPersister p = PduPersister.getPduPersister(context);
        // Move the message into MMS Outbox. A trigger will create an entry in
        // the "pending_msgs" table.
        p.move(msgUri, Telephony.Mms.Outbox.CONTENT_URI);

        // Now update the pending_msgs table with an error for that new item.
        ContentValues values = new ContentValues(1);
        values.put(Telephony.MmsSms.PendingMessages.ERROR_TYPE, Telephony.MmsSms.ERR_TYPE_GENERIC_PERMANENT);
        long msgId = ContentUris.parseId(msgUri);
        SqliteWrapper.update(context, mContentResolver,
                Telephony.MmsSms.PendingMessages.CONTENT_URI,
                values, Telephony.MmsSms.PendingMessages.MSG_ID + "=" + msgId, null);
    } catch (MmsException e) {
        // Not much we can do here. If the p.move throws an exception, we'll just
        // leave the message in the draft box.
        Log.e(TAG, "Failed to move message to outbox and mark as error: " + msgUri, e);
    }
}
项目:qksms    文件:Conversation.java   
/**
 * Check for locked messages in all threads or a specified thread.
 *
 * @param handler   An AsyncQueryHandler that will receive onQueryComplete
 *                  upon completion of looking for locked messages
 * @param threadIds A list of threads to search. null means all threads
 * @param token     The token that will be passed to onQueryComplete
 */
public static void startQueryHaveLockedMessages(AsyncQueryHandler handler,
                                                Collection<Long> threadIds,
                                                int token) {
    handler.cancelOperation(token);
    Uri uri = MmsSms.CONTENT_LOCKED_URI;

    String selection = null;
    if (threadIds != null) {
        StringBuilder buf = new StringBuilder();
        int i = 0;

        for (long threadId : threadIds) {
            if (i++ > 0) {
                buf.append(" OR ");
            }
            // We have to build the selection arg into the selection because deep down in
            // provider, the function buildUnionSubQuery takes selectionArgs, but ignores it.
            buf.append(Mms.THREAD_ID).append("=").append(Long.toString(threadId));
        }
        selection = buf.toString();
    }
    handler.startQuery(token, threadIds, uri,
            ALL_THREADS_PROJECTION, selection, null, Conversations.DEFAULT_SORT_ORDER);
}
项目:sms_DualCard    文件:WorkingMessage.java   
private void markMmsMessageWithError(Uri mmsUri) {
    try {
        PduPersister p = PduPersister.getPduPersister(mActivity);
        // Move the message into MMS Outbox. A trigger will create an entry
        // in
        // the "pending_msgs" table.
        p.move(mmsUri, Mms.Outbox.CONTENT_URI);

        // Now update the pending_msgs table with an error for that new
        // item.
        ContentValues values = new ContentValues(1);
        values.put(PendingMessages.ERROR_TYPE,
                MmsSms.ERR_TYPE_GENERIC_PERMANENT);
        long msgId = ContentUris.parseId(mmsUri);
        SqliteWrapper.update(mActivity, mContentResolver,
                PendingMessages.CONTENT_URI, values, PendingMessages.MSG_ID
                        + "=" + msgId, null);
    } catch (MmsException e) {
        // Not much we can do here. If the p.move throws an exception, we'll
        // just
        // leave the message in the draft box.
        Log.e(TAG, "Failed to move message to outbox and mark as error: "
                + mmsUri, e);
    }
}
项目:android-aosp-mms    文件:Conversation.java   
/**
 * Check for locked messages in all threads or a specified thread.
 * @param handler An AsyncQueryHandler that will receive onQueryComplete
 *                upon completion of looking for locked messages
 * @param threadIds   A list of threads to search. null means all threads
 * @param token   The token that will be passed to onQueryComplete
 */
public static void startQueryHaveLockedMessages(AsyncQueryHandler handler,
        Collection<Long> threadIds,
        int token) {
    handler.cancelOperation(token);
    Uri uri = MmsSms.CONTENT_LOCKED_URI;

    String selection = null;
    if (threadIds != null) {
        StringBuilder buf = new StringBuilder();
        int i = 0;

        for (long threadId : threadIds) {
            if (i++ > 0) {
                buf.append(" OR ");
            }
            // We have to build the selection arg into the selection because deep down in
            // provider, the function buildUnionSubQuery takes selectionArgs, but ignores it.
            buf.append(Mms.THREAD_ID).append("=").append(Long.toString(threadId));
        }
        selection = buf.toString();
    }
    handler.startQuery(token, threadIds, uri,
            ALL_THREADS_PROJECTION, selection, null, Conversations.DEFAULT_SORT_ORDER);
}
项目:android-aosp-mms    文件:WorkingMessage.java   
private void markMmsMessageWithError(Uri mmsUri) {
    try {
        PduPersister p = PduPersister.getPduPersister(mActivity);
        // Move the message into MMS Outbox. A trigger will create an entry in
        // the "pending_msgs" table.
        p.move(mmsUri, Mms.Outbox.CONTENT_URI);

        // Now update the pending_msgs table with an error for that new item.
        ContentValues values = new ContentValues(1);
        values.put(PendingMessages.ERROR_TYPE, MmsSms.ERR_TYPE_GENERIC_PERMANENT);
        long msgId = ContentUris.parseId(mmsUri);
        SqliteWrapper.update(mActivity, mContentResolver,
                PendingMessages.CONTENT_URI,
                values, PendingMessages.MSG_ID + "=" + msgId, null);
    } catch (MmsException e) {
        // Not much we can do here. If the p.move throws an exception, we'll just
        // leave the message in the draft box.
        Log.e(TAG, "Failed to move message to outbox and mark as error: " + mmsUri, e);
    }
}
项目:NoticeDog    文件:MmsMonitor.java   
@TargetApi(19)
public void start(Context context) {
    this.context = context;
    this.listeners = new ArrayList();
    this.pendingMessages = new ArrayList();
    this.mmsDownloadedReceiver = null;
    this.mmsContentObserver = null;
    this.mmsContentObserver = new MmsContentObserver(new Handler(Looper.getMainLooper()));
    context.getContentResolver().registerContentObserver(MmsSms.CONTENT_URI, true, this.mmsContentObserver);
    this.lastMessageId = -1;
    loadLastMessageId();
}
项目:qksms    文件:MessageItem.java   
public boolean isFailedMessage() {
    boolean isFailedMms = isMms()
                        && (mErrorType >= MmsSms.ERR_TYPE_GENERIC_PERMANENT);
    boolean isFailedSms = isSms()
                        && (mBoxId == Sms.MESSAGE_TYPE_FAILED);
    return isFailedMms || isFailedSms;
}
项目:AndroidTextManager    文件:PduPersister.java   
/**
 * Find all messages to be sent or downloaded before certain time.
 */
public Cursor getPendingMessages(long dueTime) {
    Uri.Builder uriBuilder = PendingMessages.CONTENT_URI.buildUpon();
    uriBuilder.appendQueryParameter("protocol", "mms");
    String selection = PendingMessages.ERROR_TYPE + " < ?"
            + " AND " + PendingMessages.DUE_TIME + " <= ?";
    String[] selectionArgs = new String[] {
            String.valueOf(MmsSms.ERR_TYPE_GENERIC_PERMANENT),
            String.valueOf(dueTime)
    };
    return mContentResolver.query(
            uriBuilder.build(), null, selection, selectionArgs,
            PendingMessages.DUE_TIME);
}
项目:sms_DualCard    文件:Conversation.java   
/**
 * Check for locked messages in all threads or a specified thread.
 * 
 * @param handler
 *            An AsyncQueryHandler that will receive onQueryComplete upon
 *            completion of looking for locked messages
 * @param threadIds
 *            A list of threads to search. null means all threads
 * @param token
 *            The token that will be passed to onQueryComplete
 */
public static void startQueryHaveLockedMessages(AsyncQueryHandler handler,
        Collection<Long> threadIds, int token) {
    handler.cancelOperation(token);
    Uri uri = MmsSms.CONTENT_LOCKED_URI;

    String selection = null;
    if (threadIds != null) {
        StringBuilder buf = new StringBuilder();
        int i = 0;

        for (long threadId : threadIds) {
            if (i++ > 0) {
                buf.append(" OR ");
            }
            // We have to build the selection arg into the selection because
            // deep down in
            // provider, the function buildUnionSubQuery takes
            // selectionArgs, but ignores it.
            buf.append(Mms.THREAD_ID).append("=")
                    .append(Long.toString(threadId));
        }
        selection = buf.toString();
    }
    handler.startQuery(token, threadIds, uri, ALL_THREADS_PROJECTION,
            selection, null, Conversations.DEFAULT_SORT_ORDER);
}
项目:sms_DualCard    文件:MessageItem.java   
public boolean isFailedMessage() {
    boolean isFailedMms = isMms()
                        && (mErrorType >= MmsSms.ERR_TYPE_GENERIC_PERMANENT);
    boolean isFailedSms = isSms()
                        && (mBoxId == Sms.MESSAGE_TYPE_FAILED);
    return isFailedMms || isFailedSms;
}
项目:android-aosp-mms    文件:MessageItem.java   
public boolean isFailedMessage() {
    boolean isFailedMms = isMms()
                        && (mErrorType >= MmsSms.ERR_TYPE_GENERIC_PERMANENT);
    boolean isFailedSms = isSms()
                        && (mBoxId == Sms.MESSAGE_TYPE_FAILED);
    return isFailedMms || isFailedSms;
}
项目:sms_DualCard    文件:MmsMessageSender.java   
public boolean sendMessage(long token) throws MmsException {
    // Load the MMS from the message uri
    if (Log.isLoggable(LogTag.APP, Log.VERBOSE)) {
        LogTag.debug("sendMessage uri: " + mMessageUri);
    }
    PduPersister p = PduPersister.getPduPersister(mContext);
    GenericPdu pdu = p.load(mMessageUri);

    if (pdu.getMessageType() != PduHeaders.MESSAGE_TYPE_SEND_REQ) {
        throw new MmsException("Invalid message: " + pdu.getMessageType());
    }

    SendReq sendReq = (SendReq) pdu;

    // Update headers.
    updatePreferencesHeaders(sendReq);

    // MessageClass.
    sendReq.setMessageClass(DEFAULT_MESSAGE_CLASS.getBytes());

    // Update the 'date' field of the message before sending it.
    sendReq.setDate(System.currentTimeMillis() / 1000L);

    sendReq.setMessageSize(mMessageSize);

    p.updateHeaders(mMessageUri, sendReq);

    long messageId = ContentUris.parseId(mMessageUri);

    // Move the message into MMS Outbox.
    if (!mMessageUri.toString().startsWith(Mms.Draft.CONTENT_URI.toString())) {
        // If the message is already in the outbox (most likely because we created a "primed"
        // message in the outbox when the user hit send), then we have to manually put an
        // entry in the pending_msgs table which is where TransacationService looks for
        // messages to send. Normally, the entry in pending_msgs is created by the trigger:
        // insert_mms_pending_on_update, when a message is moved from drafts to the outbox.
        ContentValues values = new ContentValues(7);

        values.put(PendingMessages.PROTO_TYPE, MmsSms.MMS_PROTO);
        values.put(PendingMessages.MSG_ID, messageId);
        values.put(PendingMessages.MSG_TYPE, pdu.getMessageType());
        values.put(PendingMessages.ERROR_TYPE, 0);
        values.put(PendingMessages.ERROR_CODE, 0);
        values.put(PendingMessages.RETRY_INDEX, 0);
        values.put(PendingMessages.DUE_TIME, 0);

        SqliteWrapper.insert(mContext, mContext.getContentResolver(),
                PendingMessages.CONTENT_URI, values);
    } else {
        p.move(mMessageUri, Mms.Outbox.CONTENT_URI);
    }

    // Start MMS transaction service
    SendingProgressTokenManager.put(messageId, token);
    if (MultiSimConfig.isMultiSimEnabled()) {
        Intent intent = new Intent(mContext, TransactionService.class);
        intent.putExtra(Mms.SUB_ID, ComposeMessageActivity.subSelected);
        Intent silentIntent = new Intent(mContext,
                edu.bupt.mms.ui.SelectMmsSubscription.class);
        silentIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        silentIntent.putExtras(intent); //copy all extras
        mContext.startService(silentIntent);
    } else {
        mContext.startService(new Intent(mContext, TransactionService.class));
    }

    return true;
}
项目:sms_DualCard    文件:TransactionService.java   
private static boolean isTransientFailure(int type) {
    return (type < MmsSms.ERR_TYPE_GENERIC_PERMANENT) && (type > MmsSms.NO_ERROR);
}
项目:android-aosp-mms    文件:MmsMessageSender.java   
public boolean sendMessage(long token) throws MmsException {
    // Load the MMS from the message uri
    if (Log.isLoggable(LogTag.APP, Log.VERBOSE)) {
        LogTag.debug("sendMessage uri: " + mMessageUri);
    }
    PduPersister p = PduPersister.getPduPersister(mContext);
    GenericPdu pdu = p.load(mMessageUri);

    if (pdu.getMessageType() != PduHeaders.MESSAGE_TYPE_SEND_REQ) {
        throw new MmsException("Invalid message: " + pdu.getMessageType());
    }

    SendReq sendReq = (SendReq) pdu;

    // Update headers.
    updatePreferencesHeaders(sendReq);

    // MessageClass.
    sendReq.setMessageClass(DEFAULT_MESSAGE_CLASS.getBytes());

    // Update the 'date' field of the message before sending it.
    sendReq.setDate(System.currentTimeMillis() / 1000L);

    sendReq.setMessageSize(mMessageSize);

    p.updateHeaders(mMessageUri, sendReq);

    long messageId = ContentUris.parseId(mMessageUri);

    // Move the message into MMS Outbox.
    if (!mMessageUri.toString().startsWith(Mms.Draft.CONTENT_URI.toString())) {
        // If the message is already in the outbox (most likely because we created a "primed"
        // message in the outbox when the user hit send), then we have to manually put an
        // entry in the pending_msgs table which is where TransacationService looks for
        // messages to send. Normally, the entry in pending_msgs is created by the trigger:
        // insert_mms_pending_on_update, when a message is moved from drafts to the outbox.
        ContentValues values = new ContentValues(7);

        values.put(PendingMessages.PROTO_TYPE, MmsSms.MMS_PROTO);
        values.put(PendingMessages.MSG_ID, messageId);
        values.put(PendingMessages.MSG_TYPE, pdu.getMessageType());
        values.put(PendingMessages.ERROR_TYPE, 0);
        values.put(PendingMessages.ERROR_CODE, 0);
        values.put(PendingMessages.RETRY_INDEX, 0);
        values.put(PendingMessages.DUE_TIME, 0);

        SqliteWrapper.insert(mContext, mContext.getContentResolver(),
                PendingMessages.CONTENT_URI, values);
    } else {
        p.move(mMessageUri, Mms.Outbox.CONTENT_URI);
    }

    // Start MMS transaction service
    SendingProgressTokenManager.put(messageId, token);
    mContext.startService(new Intent(mContext, TransactionService.class));

    return true;
}
项目:android-aosp-mms    文件:TransactionService.java   
private static boolean isTransientFailure(int type) {
    return type > MmsSms.NO_ERROR && type < MmsSms.ERR_TYPE_GENERIC_PERMANENT;
}