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

项目:NoticeDog    文件:AppIds.java   
@TargetApi(19)
public static String getSMSAppPackageName(Context context) {
    if (VERSION.SDK_INT >= 19) {
        return Sms.getDefaultSmsPackage(context);
    }
    Intent intent = new Intent("android.intent.action.MAIN");
    intent.addCategory("android.intent.category.DEFAULT");
    intent.setType("vnd.android-dir/mms-sms");
    ComponentName componentName = intent.resolveActivity(context.getPackageManager());
    if (componentName != null) {
        return componentName.getPackageName();
    }
    return null;
}
项目:qksms    文件:SmsHelper.java   
/**
 * Add an SMS to the given URI with the specified thread ID.
 *
 * @param resolver       the content resolver to use
 * @param uri            the URI to add the message to
 * @param address        the address of the sender
 * @param body           the body of the message
 * @param subject        the pseudo-subject of the message
 * @param date           the timestamp for the message
 * @param read           true if the message has been read, false if not
 * @param deliveryReport true if a delivery report was requested, false if not
 * @param threadId       the thread_id of the message
 * @return the URI for the new message
 * @hide
 */
public static Uri addMessageToUri(ContentResolver resolver,
                                  Uri uri, String address, String body, String subject,
                                  Long date, boolean read, boolean deliveryReport, long threadId) {
    ContentValues values = new ContentValues(7);

    values.put(Sms.ADDRESS, address);
    if (date != null) {
        values.put(Sms.DATE, date);
    }
    values.put(Sms.READ, read ? Integer.valueOf(1) : Integer.valueOf(0));
    values.put(Sms.SUBJECT, subject);
    values.put(Sms.BODY, body);
    if (deliveryReport) {
        values.put(Sms.STATUS, Sms.STATUS_PENDING);
    }
    if (threadId != -1L) {
        values.put(Sms.THREAD_ID, threadId);
    }
    return resolver.insert(uri, values);
}
项目:qksms    文件:Conversation.java   
public static void dumpSmsTable(Context context) {
    LogTag.debug("**** Dump of sms table ****");
    Cursor c = context.getContentResolver().query(Sms.CONTENT_URI,
            SMS_PROJECTION, null, null, "_id DESC");
    try {
        // Only dump the latest 20 messages
        c.moveToPosition(-1);
        while (c.moveToNext() && c.getPosition() < 20) {
            String body = c.getString(COLUMN_SMS_BODY);
            LogTag.debug("dumpSmsTable " + BaseColumns._ID + ": " + c.getLong(COLUMN_ID) +
                    " " + Sms.THREAD_ID + " : " + c.getLong(DATE) +
                    " " + Sms.ADDRESS + " : " + c.getString(COLUMN_SMS_ADDRESS) +
                    " " + Sms.BODY + " : " + body.substring(0, Math.min(body.length(), 8)) +
                    " " + Sms.DATE + " : " + c.getLong(COLUMN_SMS_DATE) +
                    " " + Sms.TYPE + " : " + c.getInt(COLUMN_SMS_TYPE));
        }
    } finally {
        c.close();
    }
}
项目:qksms    文件:MessageUtils.java   
public static void lockMessage(Context context, MessageItem msgItem, boolean locked) {
    Uri uri;
    if ("sms".equals(msgItem.mType)) {
        uri = Sms.CONTENT_URI;
    } else {
        uri = Mms.CONTENT_URI;
    }
    final Uri lockUri = ContentUris.withAppendedId(uri, msgItem.mMsgId);

    final ContentValues values = new ContentValues(1);
    values.put("locked", locked ? 1 : 0);

    new Thread(() -> {
        context.getContentResolver().update(lockUri,
                values, null, null);
    }, "MainActivity.lockMessage").start();
}
项目:sms_DualCard    文件:MessagingNotification.java   
/**
 * Get the thread ID of the SMS message with the given URI
 * @param context The context
 * @param uri The URI of the SMS message
 * @return The thread ID, or THREAD_NONE if the URI contains no entries
 */
public static long getSmsThreadId(Context context, Uri uri) {
    Cursor cursor = SqliteWrapper.query(
        context,
        context.getContentResolver(),
        uri,
        SMS_THREAD_ID_PROJECTION,
        null,
        null,
        null);

    if (cursor == null) {
        return THREAD_NONE;
    }

    try {
        if (cursor.moveToFirst()) {
            return cursor.getLong(cursor.getColumnIndex(Sms.THREAD_ID));
        } else {
            return THREAD_NONE;
        }
    } finally {
        cursor.close();
    }
}
项目:sms_DualCard    文件:SmsReceiverService.java   
/**
 * Move all messages that are in the outbox to the failed state and set them to unread.
 * @return The number of messages that were actually moved
 */
private int moveOutboxMessagesToFailedBox() {
    ContentValues values = new ContentValues(3);

    values.put(Sms.TYPE, Sms.MESSAGE_TYPE_FAILED);
    values.put(Sms.ERROR_CODE, SmsManager.RESULT_ERROR_GENERIC_FAILURE);
    values.put(Sms.READ, Integer.valueOf(0));

    int messageCount = SqliteWrapper.update(
            getApplicationContext(), getContentResolver(), Outbox.CONTENT_URI,
            values, "type = " + Sms.MESSAGE_TYPE_OUTBOX, null);
    if (Log.isLoggable(LogTag.TRANSACTION, Log.VERBOSE) || LogTag.DEBUG_SEND) {
        Log.v(TAG, "moveOutboxMessagesToFailedBox messageCount: " + messageCount);
    }
    return messageCount;
}
项目:sms_DualCard    文件:MessageStatusService.java   
@Override
protected void onHandleIntent(Intent intent) {
    // This method is called on a worker thread.

    Uri messageUri = intent.getData();
    byte[] pdu = intent.getByteArrayExtra("pdu");
    String format = intent.getStringExtra("format");

    SmsMessage message = updateMessageStatus(this, messageUri, pdu, format);

    // Called on a background thread, so it's OK to block.
    if (message != null && message.getStatus() < Sms.STATUS_PENDING) {
        MessagingNotification.blockingUpdateNewMessageIndicator(this,
                MessagingNotification.THREAD_NONE, message.isStatusReportMessage());
    }
}
项目:sms_DualCard    文件:Conversation.java   
public static void dumpSmsTable(Context context) {
    LogTag.debug("**** Dump of sms table ****");
    Cursor c = context.getContentResolver().query(Sms.CONTENT_URI,
            SMS_PROJECTION, null, null, "_id DESC");
    try {
        // Only dump the latest 20 messages
        c.moveToPosition(-1);
        while (c.moveToNext() && c.getPosition() < 20) {
            String body = c.getString(COLUMN_SMS_BODY);
            LogTag.debug("dumpSmsTable " + BaseColumns._ID + ": "
                    + c.getLong(COLUMN_ID) + " " + Sms.THREAD_ID + " : "
                    + c.getLong(DATE) + " " + Sms.ADDRESS + " : "
                    + c.getString(COLUMN_SMS_ADDRESS) + " " + Sms.BODY
                    + " : " + body.substring(0, Math.min(body.length(), 8))
                    + " " + Sms.DATE + " : " + c.getLong(COLUMN_SMS_DATE)
                    + " " + Sms.TYPE + " : " + c.getInt(COLUMN_SMS_TYPE));
        }
    } finally {
        c.close();
    }
}
项目:sms_DualCard    文件:WorkingMessage.java   
private void updateDraftSmsMessage(final Conversation conv, String contents) {
    final long threadId = conv.getThreadId();
    if (Log.isLoggable(LogTag.APP, Log.VERBOSE)) {
        LogTag.debug("updateDraftSmsMessage tid=%d, contents=\"%s\"",
                threadId, contents);
    }

    // If we don't have a valid thread, there's nothing to do.
    if (threadId <= 0) {
        return;
    }

    ContentValues values = new ContentValues(3);
    values.put(Sms.THREAD_ID, threadId);
    values.put(Sms.BODY, contents);
    values.put(Sms.TYPE, Sms.MESSAGE_TYPE_DRAFT);
    SqliteWrapper.insert(mActivity, mContentResolver, Sms.CONTENT_URI,
            values);
    asyncDeleteDraftMmsMessage(conv);
    mMessageUri = null;
}
项目:sms_DualCard    文件:ComposeMessageActivity.java   
private void lockMessage(MessageItem msgItem, boolean locked) {
    Uri uri;
    if ("sms".equals(msgItem.mType)) {
        uri = Sms.CONTENT_URI;
    } else {
        uri = Mms.CONTENT_URI;
    }
    final Uri lockUri = ContentUris.withAppendedId(uri, msgItem.mMsgId);

    final ContentValues values = new ContentValues(1);
    values.put("locked", locked ? 1 : 0);

    new Thread(new Runnable() {
        @Override
        public void run() {
            getContentResolver().update(lockUri, values, null, null);
        }
    }, "ComposeMessageActivity.lockMessage").start();
}
项目:EasyAccess    文件:TextMessagesApp.java   
@TargetApi(19)
public void checkIfDefault() {
    final String myPackageName = getPackageName();
    if (android.os.Build.VERSION.SDK_INT >= 19) {
        if (!Telephony.Sms.getDefaultSmsPackage(this).equals(myPackageName)) {
            // App is not default.
            // Show the "not currently set as the default SMS app" dialog
            System.out.println(" setting false");
            isDefault = false;
            Intent intent = new Intent(Sms.Intents.ACTION_CHANGE_DEFAULT);
            intent.putExtra(Sms.Intents.EXTRA_PACKAGE_NAME,
                    getApplicationContext().getPackageName());
            startActivityForResult(intent,99);
        }
        else{
            System.out.println(" setting true");
            isDefault = true;
        }

    }
    else
        isDefault = true;
}
项目:android-aosp-mms    文件:SmsReceiverService.java   
/**
 * Move all messages that are in the outbox to the failed state and set them to unread.
 * @return The number of messages that were actually moved
 */
private int moveOutboxMessagesToFailedBox() {
    ContentValues values = new ContentValues(3);

    values.put(Sms.TYPE, Sms.MESSAGE_TYPE_FAILED);
    values.put(Sms.ERROR_CODE, SmsManager.RESULT_ERROR_GENERIC_FAILURE);
    values.put(Sms.READ, Integer.valueOf(0));

    int messageCount = SqliteWrapper.update(
            getApplicationContext(), getContentResolver(), Outbox.CONTENT_URI,
            values, "type = " + Sms.MESSAGE_TYPE_OUTBOX, null);
    if (Log.isLoggable(LogTag.TRANSACTION, Log.VERBOSE) || LogTag.DEBUG_SEND) {
        Log.v(TAG, "moveOutboxMessagesToFailedBox messageCount: " + messageCount);
    }
    return messageCount;
}
项目:android-aosp-mms    文件:MessageStatusService.java   
@Override
protected void onHandleIntent(Intent intent) {
    // This method is called on a worker thread.

    Uri messageUri = intent.getData();
    byte[] pdu = intent.getByteArrayExtra("pdu");
    String format = intent.getStringExtra("format");

    SmsMessage message = updateMessageStatus(this, messageUri, pdu, format);

    // Called on a background thread, so it's OK to block.
    if (message != null && message.getStatus() < Sms.STATUS_PENDING) {
        MessagingNotification.blockingUpdateNewMessageIndicator(this,
                MessagingNotification.THREAD_NONE, message.isStatusReportMessage());
    }
}
项目:android-aosp-mms    文件:Conversation.java   
public static void dumpSmsTable(Context context) {
    LogTag.debug("**** Dump of sms table ****");
    Cursor c = context.getContentResolver().query(Sms.CONTENT_URI,
            SMS_PROJECTION, null, null, "_id DESC");
    try {
        // Only dump the latest 20 messages
        c.moveToPosition(-1);
        while (c.moveToNext() && c.getPosition() < 20) {
            String body = c.getString(COLUMN_SMS_BODY);
            LogTag.debug("dumpSmsTable " + BaseColumns._ID + ": " + c.getLong(COLUMN_ID) +
                    " " + Sms.THREAD_ID + " : " + c.getLong(DATE) +
                    " " + Sms.ADDRESS + " : " + c.getString(COLUMN_SMS_ADDRESS) +
                    " " + Sms.BODY + " : " + body.substring(0, Math.min(body.length(), 8)) +
                    " " + Sms.DATE + " : " + c.getLong(COLUMN_SMS_DATE) +
                    " " + Sms.TYPE + " : " + c.getInt(COLUMN_SMS_TYPE));
        }
    } finally {
        c.close();
    }
}
项目:android-aosp-mms    文件:WorkingMessage.java   
private void updateDraftSmsMessage(final Conversation conv, String contents) {
    final long threadId = conv.getThreadId();
    if (Log.isLoggable(LogTag.APP, Log.VERBOSE)) {
        LogTag.debug("updateDraftSmsMessage tid=%d, contents=\"%s\"", threadId, contents);
    }

    // If we don't have a valid thread, there's nothing to do.
    if (threadId <= 0) {
        return;
    }

    ContentValues values = new ContentValues(3);
    values.put(Sms.THREAD_ID, threadId);
    values.put(Sms.BODY, contents);
    values.put(Sms.TYPE, Sms.MESSAGE_TYPE_DRAFT);
    SqliteWrapper.insert(mActivity, mContentResolver, Sms.CONTENT_URI, values);
    asyncDeleteDraftMmsMessage(conv);
    mMessageUri = null;
}
项目:android-aosp-mms    文件:ComposeMessageActivity.java   
private void editSmsMessageItem(MessageItem msgItem) {
    // When the message being edited is the only message in the conversation, the delete
    // below does something subtle. The trigger "delete_obsolete_threads_pdu" sees that a
    // thread contains no messages and silently deletes the thread. Meanwhile, the mConversation
    // object still holds onto the old thread_id and code thinks there's a backing thread in
    // the DB when it really has been deleted. Here we try and notice that situation and
    // clear out the thread_id. Later on, when Conversation.ensureThreadId() is called, we'll
    // create a new thread if necessary.
    synchronized(mConversation) {
        if (mConversation.getMessageCount() <= 1) {
            mConversation.clearThreadId();
            MessagingNotification.setCurrentlyDisplayedThreadId(
                MessagingNotification.THREAD_NONE);
        }
    }
    // Delete the old undelivered SMS and load its content.
    Uri uri = ContentUris.withAppendedId(Sms.CONTENT_URI, msgItem.mMsgId);
    SqliteWrapper.delete(ComposeMessageActivity.this,
            mContentResolver, uri, null, null);

    mWorkingMessage.setText(msgItem.mBody);
}
项目:android-aosp-mms    文件:ComposeMessageActivity.java   
private void lockMessage(MessageItem msgItem, boolean locked) {
    Uri uri;
    if ("sms".equals(msgItem.mType)) {
        uri = Sms.CONTENT_URI;
    } else {
        uri = Mms.CONTENT_URI;
    }
    final Uri lockUri = ContentUris.withAppendedId(uri, msgItem.mMsgId);

    final ContentValues values = new ContentValues(1);
    values.put("locked", locked ? 1 : 0);

    new Thread(new Runnable() {
        @Override
        public void run() {
            getContentResolver().update(lockUri,
                    values, null, null);
        }
    }, "ComposeMessageActivity.lockMessage").start();
}
项目:android-aosp-mms    文件:ManageSimMessages.java   
private void copyToPhoneMemory(Cursor cursor) {
    String address = cursor.getString(
            cursor.getColumnIndexOrThrow("address"));
    String body = cursor.getString(cursor.getColumnIndexOrThrow("body"));
    Long date = cursor.getLong(cursor.getColumnIndexOrThrow("date"));

    try {
        if (isIncomingMessage(cursor)) {
            Sms.Inbox.addMessage(mContentResolver, address, body, null, date, true /* read */);
        } else {
            Sms.Sent.addMessage(mContentResolver, address, body, null, date);
        }
    } catch (SQLiteException e) {
        SqliteWrapper.checkSQLiteException(this, e);
    }
}
项目:qksms    文件:Conversation.java   
private static void blockingMarkAllSmsMessagesAsSeen(final Context context) {
    ContentResolver resolver = context.getContentResolver();
    Cursor cursor = resolver.query(Sms.Inbox.CONTENT_URI,
            SEEN_PROJECTION,
            "seen=0",
            null,
            null);

    int count = 0;

    if (cursor != null) {
        try {
            count = cursor.getCount();
        } finally {
            cursor.close();
        }
    }

    if (count == 0) {
        return;
    }

    if (DELETEDEBUG || Log.isLoggable(LogTag.APP, Log.VERBOSE)) {
        Log.d(TAG, "mark " + count + " SMS msgs as seen");
    }

    ContentValues values = new ContentValues(1);
    values.put("seen", 1);

    resolver.update(Sms.Inbox.CONTENT_URI,
            values,
            "seen=0",
            null);
}
项目:qksms    文件:MessageItem.java   
public boolean isMe() {
    // Logic matches MessageListAdapter.getItemViewType which is used to decide which
    // type of MessageListItem to create: a left or right justified item depending on whether
    // the message is incoming or outgoing.
    boolean isIncomingMms = isMms()
                                && (mBoxId == Mms.MESSAGE_BOX_INBOX
                                        || mBoxId == Mms.MESSAGE_BOX_ALL);
    boolean isIncomingSms = isSms()
                                && (mBoxId == Sms.MESSAGE_TYPE_INBOX
                                        || mBoxId == Sms.MESSAGE_TYPE_ALL);
    return !(isIncomingMms || isIncomingSms);
}
项目:qksms    文件:MessageItem.java   
public boolean isOutgoingMessage() {
    boolean isOutgoingMms = isMms() && (mBoxId == Mms.MESSAGE_BOX_OUTBOX);
    boolean isOutgoingSms = isSms()
                                && ((mBoxId == Sms.MESSAGE_TYPE_FAILED)
                                        || (mBoxId == Sms.MESSAGE_TYPE_OUTBOX)
                                        || (mBoxId == Sms.MESSAGE_TYPE_QUEUED));
    return isOutgoingMms || isOutgoingSms;
}
项目: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;
}
项目:qksms    文件:DeliveryReportHelper.java   
private List<DeliveryReportItem> getSmsReportItems() {
    String selection = "_id = " + mMessageId;
    Cursor c = SqliteWrapper.query(mContext, mContext.getContentResolver(), Sms.CONTENT_URI,
                          SMS_REPORT_STATUS_PROJECTION, selection, null, null);
    if (c == null) {
        return null;
    }

    try {
        if (c.getCount() <= 0) {
            return null;
        }

        List<DeliveryReportItem> items = new ArrayList<>();
        while (c.moveToNext()) {
            // For sent messages with delivery reports, we stick the delivery time in the
            // date_sent column (see MessageStatusReceiver).
            String deliveryDateString = null;
            long deliveryDate = c.getLong(COLUMN_DATE_SENT);
            int messageType = c.getInt(COLUMN_MESSAGE_TYPE);
            if (messageType == Sms.MESSAGE_TYPE_SENT && deliveryDate > 0) {
                deliveryDateString = mContext.getString(R.string.delivered_label) +
                        MessageUtils.formatTimeStampString(mContext, deliveryDate, true);
            }

            items.add(new DeliveryReportItem(
                            mContext.getString(R.string.recipient_label) + c.getString(COLUMN_RECIPIENT),
                            mContext.getString(R.string.status_label) +
                                    getSmsStatusText(c.getInt(COLUMN_DELIVERY_STATUS)),
                                    deliveryDateString));
        }
        return items;
    } finally {
        c.close();
    }
}
项目:qksms    文件:DeliveryReportHelper.java   
private String getSmsStatusText(int status) {
    if (status == Sms.STATUS_NONE) {
        // No delivery report requested
        return mContext.getString(R.string.status_none);
    } else if (status >= Sms.STATUS_FAILED) {
        // Failure
        return mContext.getString(R.string.status_failed);
    } else if (status >= Sms.STATUS_PENDING) {
        // Pending
        return mContext.getString(R.string.status_pending);
    } else {
        // Success
        return mContext.getString(R.string.status_received);
    }
}
项目:sms_DualCard    文件:SmsMessageSender.java   
private boolean queueMessage(long token) throws MmsException {
    if ((mMessageText == null) || (mNumberOfDests == 0)) {
        // Don't try to send an empty message.
        throw new MmsException("Null message body or dest.");
    }

    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mContext);
    boolean requestDeliveryReport = prefs.getBoolean(
            MessagingPreferenceActivity.SMS_DELIVERY_REPORT_MODE,
            DEFAULT_DELIVERY_REPORT_MODE);

    for (int i = 0; i < mNumberOfDests; i++) {
        try {
            if (LogTag.DEBUG_SEND) {
                Log.v(TAG, "queueMessage mDests[i]: " + mDests[i] + " mThreadId: " + mThreadId);
            }
            log("updating Database with sub = " + mSubscription);
            Sms.addMessageToUri(mContext.getContentResolver(),
                    Uri.parse("content://sms/queued"), mDests[i],
                    mMessageText, null, mTimestamp,
                    true /* read */,
                    requestDeliveryReport,
                    mThreadId, mSubscription);
        } catch (SQLiteException e) {
            if (LogTag.DEBUG_SEND) {
                Log.e(TAG, "queueMessage SQLiteException", e);
            }
            SqliteWrapper.checkSQLiteException(mContext, e);
        }
    }
    // Notify the SmsReceiverService to send the message out
    mContext.sendBroadcast(new Intent(SmsReceiverService.ACTION_SEND_MESSAGE,
            null,
            mContext,
            SmsReceiver.class));
    return false;
}
项目:sms_DualCard    文件:MessagingNotification.java   
private static final MmsSmsDeliveryInfo getSmsNewDeliveryInfo(Context context) {
    ContentResolver resolver = context.getContentResolver();
    Cursor cursor = SqliteWrapper.query(context, resolver, Sms.CONTENT_URI,
                SMS_STATUS_PROJECTION, NEW_DELIVERY_SM_CONSTRAINT,
                null, Sms.DATE);

    if (cursor == null) {
        return null;
    }

    try {
        if (!cursor.moveToLast()) {
            return null;
        }

        String address = cursor.getString(COLUMN_SMS_ADDRESS);
        long timeMillis = 3000;

        Contact contact = Contact.get(address, false);
        String name = contact.getNameAndNumber();

        return new MmsSmsDeliveryInfo(context.getString(R.string.delivery_toast_body, name),
            timeMillis);

    } finally {
        cursor.close();
    }
}
项目:sms_DualCard    文件:SmsReceiverService.java   
private void messageFailedToSend(Uri uri, int error) {
    if (Log.isLoggable(LogTag.TRANSACTION, Log.VERBOSE) || LogTag.DEBUG_SEND) {
        Log.v(TAG, "messageFailedToSend msg failed uri: " + uri + " error: " + error);
    }
    Sms.moveMessageToFolder(this, uri, Sms.MESSAGE_TYPE_FAILED, error);
    MessagingNotification.notifySendFailed(getApplicationContext(), true);
}
项目:sms_DualCard    文件:MessageStatusService.java   
private SmsMessage updateMessageStatus(Context context, Uri messageUri, byte[] pdu,
        String format) {
    SmsMessage message = SmsMessage.createFromPdu(pdu, format);
    if (message == null) {
        return null;
    }
    // Create a "status/#" URL and use it to update the
    // message's status in the database.
    Cursor cursor = SqliteWrapper.query(context, context.getContentResolver(),
                        messageUri, ID_PROJECTION, null, null, null);

    try {
        if (cursor.moveToFirst()) {
            int messageId = cursor.getInt(0);

            Uri updateUri = ContentUris.withAppendedId(STATUS_URI, messageId);
            int status = message.getStatus();
            boolean isStatusReport = message.isStatusReportMessage();
            ContentValues contentValues = new ContentValues(2);

            if (Log.isLoggable(LogTag.TAG, Log.DEBUG)) {
                log("updateMessageStatus: msgUrl=" + messageUri + ", status=" + status +
                        ", isStatusReport=" + isStatusReport);
            }

            contentValues.put(Sms.STATUS, status);
            contentValues.put(Inbox.DATE_SENT, System.currentTimeMillis());
            SqliteWrapper.update(context, context.getContentResolver(),
                                updateUri, contentValues, null, null);
        } else {
            error("Can't find message for status update: " + messageUri);
        }
    } finally {
        cursor.close();
    }
    return message;
}
项目:sms_DualCard    文件:Conversation.java   
private static void blockingMarkAllSmsMessagesAsSeen(final Context context) {
    ContentResolver resolver = context.getContentResolver();
    Cursor cursor = resolver.query(Sms.Inbox.CONTENT_URI, SEEN_PROJECTION,
            "seen=0", null, null);

    int count = 0;

    if (cursor != null) {
        try {
            count = cursor.getCount();
        } finally {
            cursor.close();
        }
    }

    if (count == 0) {
        return;
    }

    if (Log.isLoggable(LogTag.APP, Log.VERBOSE)) {
        Log.d(TAG, "mark " + count + " SMS msgs as seen");
    }

    ContentValues values = new ContentValues(1);
    values.put("seen", 1);

    resolver.update(Sms.Inbox.CONTENT_URI, values, "seen=0", null);
}
项目:sms_DualCard    文件:WorkingMessage.java   
public void asyncDeleteDraftSmsMessage(Conversation conv) {
    mHasSmsDraft = false;

    final long threadId = conv.getThreadId();
    if (threadId > 0) {
        asyncDelete(ContentUris.withAppendedId(
                Sms.Conversations.CONTENT_URI, threadId), SMS_DRAFT_WHERE,
                null);
    }
}
项目:sms_DualCard    文件:MessageItem.java   
public boolean isOutgoingMessage() {
    boolean isOutgoingMms = isMms() && (mBoxId == Mms.MESSAGE_BOX_OUTBOX);
    boolean isOutgoingSms = isSms()
                                && ((mBoxId == Sms.MESSAGE_TYPE_FAILED)
                                        || (mBoxId == Sms.MESSAGE_TYPE_OUTBOX)
                                        || (mBoxId == Sms.MESSAGE_TYPE_QUEUED));
    return isOutgoingMms || isOutgoingSms;
}
项目: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;
}
项目:sms_DualCard    文件:ComposeMessageActivity.java   
private void editSmsMessageItem(MessageItem msgItem) {
    // When the message being edited is the only message in the
    // conversation, the delete
    // below does something subtle. The trigger
    // "delete_obsolete_threads_pdu" sees that a
    // thread contains no messages and silently deletes the thread.
    // Meanwhile, the mConversation
    // object still holds onto the old thread_id and code thinks there's a
    // backing thread in
    // the DB when it really has been deleted. Here we try and notice that
    // situation and
    // clear out the thread_id. Later on, when Conversation.ensureThreadId()
    // is called, we'll
    // create a new thread if necessary.
    synchronized (mConversation) {
        if (mConversation.getMessageCount() <= 1) {
            mConversation.clearThreadId();
            MessagingNotification
                    .setCurrentlyDisplayedThreadId(MessagingNotification.THREAD_NONE);
        }
    }
    // Delete the old undelivered SMS and load its content.
    Uri uri = ContentUris.withAppendedId(Sms.CONTENT_URI, msgItem.mMsgId);
    SqliteWrapper.delete(ComposeMessageActivity.this, mContentResolver,
            uri, null, null);

    mWorkingMessage.setText(msgItem.mBody);
}
项目:sms_DualCard    文件:ClassZeroActivity.java   
private Uri replaceMessage(SmsMessage sms) {
    ContentValues values = extractContentValues(sms);

    values.put(Inbox.BODY, sms.getMessageBody());

    ContentResolver resolver = getContentResolver();
    String originatingAddress = sms.getOriginatingAddress();
    int protocolIdentifier = sms.getProtocolIdentifier();
    String selection = Sms.ADDRESS + " = ? AND " + Sms.PROTOCOL + " = ?";
    String[] selectionArgs = new String[] { originatingAddress,
            Integer.toString(protocolIdentifier) };

    Cursor cursor = SqliteWrapper.query(this, resolver, Inbox.CONTENT_URI,
            REPLACE_PROJECTION, selection, selectionArgs, null);

    try {
        if (cursor.moveToFirst()) {
            long messageId = cursor.getLong(REPLACE_COLUMN_ID);
            Uri messageUri = ContentUris.withAppendedId(
                    Sms.CONTENT_URI, messageId);

            SqliteWrapper.update(this, resolver, messageUri, values,
                    null, null);
            return messageUri;
        }
    } finally {
        cursor.close();
    }
    return storeMessage(sms);
}
项目:sms_DualCard    文件:DeliveryReportActivity.java   
private List<DeliveryReportItem> getSmsReportItems() {
    String selection = "_id = " + mMessageId;
    Cursor c = SqliteWrapper.query(this, getContentResolver(), Sms.CONTENT_URI,
                          SMS_REPORT_STATUS_PROJECTION, selection, null, null);
    if (c == null) {
        return null;
    }

    try {
        if (c.getCount() <= 0) {
            return null;
        }

        List<DeliveryReportItem> items = new ArrayList<DeliveryReportItem>();
        while (c.moveToNext()) {
            // For sent messages with delivery reports, we stick the delivery time in the
            // date_sent column (see MessageStatusReceiver).
            String deliveryDateString = null;
            long deliveryDate = c.getLong(COLUMN_DATE_SENT);
            int messageType = c.getInt(COLUMN_MESSAGE_TYPE);
            if (messageType == Sms.MESSAGE_TYPE_SENT && deliveryDate > 0) {
                deliveryDateString = getString(R.string.delivered_label) +
                        MessageUtils.formatTimeStampString(this,
                                deliveryDate, true);
            }

            items.add(new DeliveryReportItem(
                            getString(R.string.recipient_label) + c.getString(COLUMN_RECIPIENT),
                            getString(R.string.status_label) +
                                    getSmsStatusText(c.getInt(COLUMN_DELIVERY_STATUS)),
                                    deliveryDateString));
        }
        return items;
    } finally {
        c.close();
    }
}
项目:sms_DualCard    文件:DeliveryReportActivity.java   
private String getSmsStatusText(int status) {
    if (status == Sms.STATUS_NONE) {
        // No delivery report requested
        return getString(R.string.status_none);
    } else if (status >= Sms.STATUS_FAILED) {
        // Failure
        return getString(R.string.status_failed);
    } else if (status >= Sms.STATUS_PENDING) {
        // Pending
        return getString(R.string.status_pending);
    } else {
        // Success
        return getString(R.string.status_received);
    }
}
项目:sms_DualCard    文件:Recycler.java   
protected Cursor getAllThreads(Context context) {
    ContentResolver resolver = context.getContentResolver();
    Cursor cursor = SqliteWrapper.query(context, resolver,
            Telephony.Sms.Conversations.CONTENT_URI,
            ALL_SMS_THREADS_PROJECTION, null, null, Conversations.DEFAULT_SORT_ORDER);

    return cursor;
}
项目:sms_DualCard    文件:Recycler.java   
@Override
protected boolean anyThreadOverLimit(Context context) {
    Cursor cursor = getAllThreads(context);
    if (cursor == null) {
        return false;
    }
    int limit = getMessageLimit(context);
    try {
        while (cursor.moveToNext()) {
            long threadId = getThreadId(cursor);
            ContentResolver resolver = context.getContentResolver();
            Cursor msgs = SqliteWrapper.query(context, resolver,
                    ContentUris.withAppendedId(Sms.Conversations.CONTENT_URI, threadId),
                    SMS_MESSAGE_PROJECTION,
                    "locked=0",
                    null, "date DESC");     // get in newest to oldest order
            if (msgs == null) {
                return false;
            }
            try {
                if (msgs.getCount() >= limit) {
                    return true;
                }
            } finally {
                msgs.close();
            }
        }
    } finally {
        cursor.close();
    }
    return false;
}
项目:OrbitCat    文件:Message.java   
public String toRealType(int type) {
    switch (type) {
        case Sms.MESSAGE_TYPE_INBOX:
            return INBOX_MESSAGE;
        case Sms.MESSAGE_TYPE_OUTBOX:
            return  OUTBOX_MESSAGE;
        case Sms.MESSAGE_TYPE_DRAFT:
            return DRAFT_MESSAGE;
        case Sms.MESSAGE_TYPE_SENT:
            return SENT_MESSAGE;
        default:
            return "";
    }
}
项目:contact-notifier    文件:SettingsActivity.java   
@TargetApi(Build.VERSION_CODES.KITKAT)
private static void setupSMSAppPreference(Preference smsPreference) {
    String summary = "Set the SMS app in use";
    PackageManager packageManager = smsPreference.getContext().getPackageManager();
    String smsAppPackageName = Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT ? smsPreference.getSharedPreferences().getString(smsPreference.getKey(), null)
            : Sms.getDefaultSmsPackage(smsPreference.getContext());
    if (smsAppPackageName != null) {
        try {
            CharSequence smsAppLabel = packageManager.getApplicationLabel(packageManager.getApplicationInfo(smsAppPackageName, 0));
            summary = "Launching " + smsAppLabel + " if Contact Notifier notification is tapped";
        } catch (NameNotFoundException e) {
            e.printStackTrace();
        }
    }
    smsPreference.setSummary(summary);
    smsPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {

        @Override
        public boolean onPreferenceClick(Preference preference) {
            preference.getContext().startActivity(new Intent(preference.getContext(), SMSAppChooserContainer.class));
            return false;
        }
    });

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        smsPreference.setEnabled(false);
    }
}