Выберите первое SMS на входящей базе данных Android - PullRequest
3 голосов
/ 08 февраля 2010

Я отчаянно пытаюсь найти решение, поэтому я прошу помощи! Я новый французский программист. Моя цель - создать виджет, способный показывать смс. Моя проблема в том, что я не знаю, как создать курсор, который выбирает первое SMS в содержании: // sms / inbox Извините за мой плохой английский, я надеюсь, вы сможете понять, что я. Спасибо за ваш ответ. это мой код:

package sfeir.monwidget;
import android.R.string;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.net.Uri;
import android.widget.RemoteViews;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.widget.ArrayAdapter;   


public class MonWidget extends AppWidgetProvider {

 public void onUpdate(Context context, AppWidgetManager appWidgetManager,
            int[] appWidgetIds) {
     Uri uri = Uri.parse("content://sms/inbox");
    // returns all the results.
    Cursor c= getContentResolver().query(uri, null, null ,null,null); 
    // called by the Activity.
    startManagingCursor(c);
    String body = null;
    String number = null;

    if(c.moveToFirst()) { // move cursor to first row
       // retrieves the body and number of the SMS
       body = c.getString(c.getColumnIndexOrThrow("body")).toString();
       number = c.getString(c.getColumnIndexOrThrow("address")).toString();
    }

    // when your done, close the cursor.
    c.close(); 
 RemoteViews updateViews = new RemoteViews(context.getPackageName(),
         R.layout.widget_layout);


 updateViews.setTextColor(R.id.text, 0xFF000000);
 updateViews.setTextViewText(R.id.text, (CharSequence) body);

 ComponentName thisWidget = new ComponentName(context, MonWidget.class);
 appWidgetManager.updateAppWidget(thisWidget, updateViews);
 }

}

Ответы [ 2 ]

6 голосов
/ 08 февраля 2010

Вам необходимо установить определенные разрешения (см. Ссылку ниже), но здесь приведен пример кода, который используется Cursor для получения первого SMS-сообщения.

Uri uri = Uri.parse("content://sms/inbox");
// returns all the results from the given Context
Cursor c = context.getContentResolver().query(uri, null, null ,null,null); 

String body = null;
String number = null;

if(c.moveToFirst()) { // move cursor to first row
   // retrieves the body and number of the SMS
   body = c.getString(c.getColumnIndexOrThrow("body")).toString();
   number = c.getString(c.getColumnIndexOrThrow("address")).toString();
}

// when your done, close the cursor.
c.close(); 

Я бы порекомендовал просмотреть FrontPage / Tutorials / SMS Messaging - Mobdev Wiki , он дает хорошее введение в работу с обработкой SMS на Android.

EDIT:

Эти методы не были видны вашему приложению, поскольку оно не распространялось на суперкласс Activity. По умолчанию, когда вы разрабатываете приложение , оно наследует методы от этого отношения. Но вы сами не создаете приложение, вы разрабатываете виджет.

К счастью, в методе onUpdate они передают текущий Context, который является суперклассом для Activity, поэтому мы можем использовать переменную context для вызова getContentResolver (, см. Выше в код )

Я также удалил из кода метод startManagingCursor, его необязательно иметь, он позволяет Activity обрабатывать жизненный цикл данного Cursor на основе жизненный цикл деятельности.

Дайте мне знать, если есть проблемы.

РЕДАКТИРОВАТЬ 2:

Внутри вашего AndroidManifest.xml файла вам нужно установить правильные разрешения, чтобы избежать каких-либо исключений, добавьте эту строку.

<uses-permission android:name="android.permission.READ_SMS"></uses-permission>
0 голосов
/ 08 февраля 2010

Другим вариантом является прослушивание широковещательного намерения SMS_RECEIVED и обновление виджета приложения в коде получателя широковещания. В есть ответы на некоторые вопросы относительно использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...