Android – как сделать приложение приложения по умолчанию для приложения по умолчанию

Я разрабатываю приложение для блокировки sms. Которая работает отлично до Jelly-Bean. И он не работает от Китката до Зефира. Я искал в google и всех, кто рекомендовал получить разрешение от пользователя, чтобы сделать это приложение sms по умолчанию этого телефона, используя.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { if(!Telephony.Sms.getDefaultSmsPackage(getApplicationContext()).equals(getApplicationContext().getPackageName())) { Intent intent = new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT); intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME, getApplicationContext().getPackageName()); startActivity(intent); } } 

Файл манифеста:

 <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <uses-permission android:name="android.permission.READ_CALL_LOG" /> <uses-permission android:name="android.permission.WRITE_CALL_LOG" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.SEND_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.WRITE_SMS" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.VIBRATE" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme.NoActionBar"> <activity android:name=".RegisterActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".DashboardActivity"> <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> <activity android:name=".LoginActivity" /> <activity android:name=".ContactListActivity" /> <activity android:name=".CallLogListActivity" /> <activity android:name=".SMSContactListActivity" /> <activity android:name=".SettingsActivity" /> <receiver android:name=".PhoneStateReceiver" android:enabled="true" android:permission="android.permission.BROADCAST_SMS"> <intent-filter android:priority="9999"> <action android:name="android.intent.action.PHONE_STATE" /> <action android:name="android.intent.action.NEW_OUTGOING_CALL" /> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> <action android:name="android.provider.Telephony.SMS_DELIVER" /> <action android:name="android.intent.action.RESPOND_VIA_MESSAGE" /> </intent-filter> </receiver> <!-- Service that delivers messages from the phone "quick response" --> <service android:name=".HeadlessSmsSendService" android:enabled="true" android:exported="true" android:permission="android.permission.SEND_RESPOND_VIA_MESSAGE"> <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> <activity android:name=".BlockedCallLogActivity" /> <activity android:name=".BlockedSmsLogActivity" /> <activity android:name=".AboutUsActivity" /> </application> 

Я использовал этот образец кода. Он показывает диалог с приложением для обмена сообщениями телефона. Мое приложение не отображается в этом списке.

Теперь я хочу показать свое приложение и в этом списке, поэтому пользователь может выбрать мое приложение из этого списка, и это будет приложение sms по умолчанию для этого телефона. Как я могу это сделать. Пожалуйста, ответьте примером / кодом. Благодарю.

Я последовал за ним

Не в соответствии с кодом в вашем вопросе. Давайте рассмотрим четыре требования из сообщения в блоге :

В широковещательном приемнике включите фильтр намерений для SMS_DELIVER_ACTION («android.provider.Telephony.SMS_DELIVER»). Для широковещательного приемника также требуется разрешение BROADCAST_SMS.

У вас это есть, в форме вашего PhoneStateReceiver .

В широковещательном приемнике включите фильтр намерений для WAP_PUSH_DELIVER_ACTION («android.provider.Telephony.WAP_PUSH_DELIVER») с типом MIME «application / vnd.wap.mms-message». Для широковещательного приемника также требуется разрешение BROADCAST_WAP_PUSH.

У вас этого нет.

В своей деятельности, которая предоставляет новые сообщения, включите фильтр намерений для ACTION_SENDTO («android.intent.action.SENDTO») со схемами, смс:, smsto:, mms :, и mmsto :.

У вас это есть, в виде DashboardActivity .

В сервисе включите фильтр намерений для ACTION_RESPONSE_VIA_MESSAGE («android.intent.action.RESPOND_VIA_MESSAGE») со схемами, смс:, smsto:, mms :, и mmsto :. Для этой службы также требуется разрешение SEND_RESPOND_VIA_MESSAGE.

У вас это есть в виде HeadlessSmsSendService .

Итак, добавьте <receiver> для WAP_PUSH_DELIVER_ACTION , следуя инструкциям, и посмотрите, поможет ли это.