Запись SMS/inbox Android >= 4.4

289
08 февраля 2017, 23:50

Имеется код:

ContentValues values = new ContentValues();
    values.put("address", address);
    values.put("read", 0);
    values.put("date", String.valueOf(System.currentTimeMillis()));
    values.put("body", text);
    context.getContentResolver().insert(Uri.parse("content://sms/" + type), values);

Собственно проблема в том, что до версии 4.4 сообщение прекрасно создается и отображается, но при >= 4.4 - нет, пытался нагуглить - но нигде не нашел. Может кто знает решения проблемы?

Answer 1

Все правильно. Все дело в том, что начиная с Kitkat (v. 4.4) право на запись в БД SMS/MMS можно получить только при условии, если приложение выбрано как приложение по умолчанию для работы с сообщениями.

На уровне UI это делается так:

  • Открыть настройки телефона
  • Открыть сетевые настройки
  • Выбрать приложения по умолчанию, из списка выбрать SMS Приложение и выбрать ваше

То же самое можно сделать и программно:

Intent intent = new Intent(context, Sms.Intents.ACTION_CHANGE_DEFAULT);
intent.putExtra(Sms.Intents.EXTRA_PACKAGE_NAME, context.getPackageName());
startActivity(intent);

Чтобы приложение подходило под критерии SMS Приложения - оно должно уметь тучу вещей, типовой его манифест:

<manifest>
    ...
    <application>
        <!-- BroadcastReceiver that listens for incoming SMS messages -->
        <receiver android:name=".SmsReceiver"
                android:permission="android.permission.BROADCAST_SMS">
            <intent-filter>
                <action android:name="android.provider.Telephony.SMS_DELIVER" />
            </intent-filter>
        </receiver>
        <!-- BroadcastReceiver that listens for incoming MMS messages -->
        <receiver android:name=".MmsReceiver"
            android:permission="android.permission.BROADCAST_WAP_PUSH">
            <intent-filter>
                <action android:name="android.provider.Telephony.WAP_PUSH_DELIVER" />
                <data android:mimeType="application/vnd.wap.mms-message" />
            </intent-filter>
        </receiver>
        <!-- Activity that allows the user to send new SMS/MMS messages -->
        <activity android:name=".ComposeSmsActivity" >
            <intent-filter>
                <action android:name="android.intent.action.SEND" />                
                <action android:name="android.intent.action.SENDTO" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="sms" />
                <data android:scheme="smsto" />
                <data android:scheme="mms" />
                <data android:scheme="mmsto" />
            </intent-filter>
        </activity>
        <!-- Service that delivers messages from the phone "quick response" -->
        <service android:name=".HeadlessSmsSendService"
                 android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE"
                 android:exported="true" >
            <intent-filter>
                <action android:name="android.intent.action.RESPOND_VIA_MESSAGE" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:scheme="sms" />
                <data android:scheme="smsto" />
                <data android:scheme="mms" />
                <data android:scheme="mmsto" />
            </intent-filter>
        </service>
    </application>
</manifest>

Более подробно об этом написано здесь

READ ALSO
Проблема с кнопками в Table LibGDX

Проблема с кнопками в Table LibGDX

В общем, проблема заключается в следующем: при добавлении кнопок на Table возникает сдвиг их области нажатияНа рисунке 1

426
работа с MySql Java

работа с MySql Java

есть вот такой код, мне надо сделать общий запрос sql в базу данных, чтобы он работал в моих разных методах

357
Объявление интерфейса в интерфейсе

Объявление интерфейса в интерфейсе

Тело интерфейса может объявлять члены интерфейса, те

314
Целевой тип лямбда-выражения

Целевой тип лямбда-выражения

Что называется целевым типом лямбда-выражения?

1146