Как установить мое приложение для мобильных телефонов в Android Kitkat?
Я сделал приложение Android для Android, в котором я отправляю и получаю смс в качестве приложения для обмена сообщениями для Android. Теперь я установил свою цель в 4.4 (версия Android KitKat), но у Android KitKat есть новые настройки приложения "По умолчанию", которые пользователь может выбрать по одному приложению для обмена сообщениями. Я выполнил шаги с этого сайта, чтобы выбрать вариант для моего приложения sms в качестве приложения по умолчанию, но в настройках моего приложения никогда не появлялось во всплывающем меню выбора приложения для обмена сообщениями по умолчанию.
Ниже мой код Java, который я использовал из руководства
if( androidOS.contains("4.4") ){
if (! Telephony.Sms.getDefaultSmsPackage(this).equals(myPackageName) ) {
// App is not default.
// Show the "not currently set as the default SMS app" interface
builder = new AlertDialog.Builder(MyConversation.this);
builder.setMessage("Shoot The Messenger is not set as your default messaging app. Do you want to set it default?")
.setCancelable(false)
.setTitle("Alert!")
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@TargetApi(19)
public void onClick(DialogInterface dialog, int id) {
Intent intent =
new Intent(Telephony.Sms.Intents.ACTION_CHANGE_DEFAULT);
intent.putExtra(Telephony.Sms.Intents.EXTRA_PACKAGE_NAME,
getPackageName());
startActivity(intent);
}
});
builder.show();
}
}
Также я добавил код ниже в Manifest
.
<?xml version="1.0" encoding="utf-8"?>
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="19" />
<uses-feature android:name="android.hardware.telephony.gsm"
android:required="false"/>
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.RECEIVE_MMS" />
<uses-permission android:name="android.permission.WRITE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.INSTALL_PACKAGES"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.NoTitle" >
<activity
android:name="coms3.shootmessenger.Mysplash"
android:label="@string/app_name"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.SENDTO" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="sms" />
<data android:scheme="smsto" />
</intent-filter>
</activity>
<receiver android:name="coms3.shootmessenger.SmsReceiver"
android:permission="android.permission.BROADCAST_SMS" >
<intent-filter>
<action android:name="android.provider.Telephony.SMS_DELIVER" />
</intent-filter>
<!--
<intent-filter android:priority="2147483647" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
-->
</receiver>
<receiver android:name="com.example.bootreceiver.MyBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
<receiver android:name="coms3.shootmessenger.MMSReceiver"
android:permission="android.permission.BROADCAST_WAP_PUSH">
<intent-filter>
<action android:name="android.provider.Telephony.WAP_PUSH_RECEIVED" />
<data android:mimeType="application/vnd.wap.mms-message" />
</intent-filter>
</receiver>
<receiver android:process=":remote" android:name="AlarmManagerBroadcastReceiver"></receiver>
<receiver android:process=":remote" android:name="AlarmForPartyMessage"></receiver>
<receiver android:process=":remote" android:name="AlarmManagerMail"></receiver>
<activity
android:name="coms3.shootmessenger.ActivityFirstList"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityBase"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.SearchTab"
android:configChanges="keyboardHidden|orientation"
>
</activity>
<activity
android:name="coms3.shootmessenger.ActivityMail"
android:windowSoftInputMode="adjustPan"
>
</activity>
<activity
android:name="coms3.shootmessenger.ActivityScheduldMail"
android:windowSoftInputMode="adjustPan"
android:screenOrientation="portrait"
>
</activity>
<activity
android:name="coms3.shootmessenger.MessageTab" >
</activity>
<activity
android:name="coms3.shootmessenger.SettingsTab"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.MyConversation"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityDelayedSending"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityScheduldMessage"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityStealthMode"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivitySms"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityBlackList"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityDeleteMessage"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityDeleteone"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity android:name="coms3.shootmessenger.ActivitySmsnew" >
<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" />
</intent-filter>
</activity>
<activity
android:name="coms3.shootmessenger.ActivityEventlist"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityScheduleList"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityCancelSchedule"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityCancelEvent"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityCancelMail"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.Activitytutorial"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.ActivityConversationtutorial"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden" >
</activity>
<activity
android:name="coms3.shootmessenger.Aboutus"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden" >
</activity>
<service android:name="coms3.shootmessenger.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>
UPDATE:
Примечание: Я тестирую эмулятор...
После выполнения всех шагов я вижу только приложение для обмена сообщениями по умолчанию для Android, которое не принадлежит мне, как показано на изображении ниже. Любые виды помощи будут оценены. Спасибо в Advance.
![enter image description here]()
Ответы
Ответ 1
инструкции, которые вы опубликовали, были правильными - проблема в том, что вы должны реализовать все необходимые возможности:
-
В широковещательном приемнике включите фильтр намерений для SMS_DELIVER_ACTION
( "android.provider.Telephony.SMS_DELIVER
" ). Для широковещательного приемника также требуется разрешение BROADCAST_SMS.
Это позволяет вашему приложению напрямую получать входящие SMS-сообщения.
-
В широковещательном приемнике включите фильтр намерений для WAP_PUSH_DELIVER_ACTION
( "android.provider.Telephony.WAP_PUSH_DELIVER
" ) с типом MIME "application/vnd.wap.mms-message
". Для широковещательного приемника также требуется разрешение BROADCAST_WAP_PUSH.
Это позволяет вашему приложению напрямую получать входящие MMS-сообщения.
-
В вашей деятельности, которая поставляет новые сообщения, включите фильтр намерений для ACTION_SENDTO
( "android.intent.action.SENDTO
" ) со схемами sms:
, smsto:
, mms:
и mmsto:
.
Это позволяет вашему приложению получать намерения от других приложений, которые хотят доставить сообщение.
-
В службе включите фильтр намерений для ACTION_RESPONSE_VIA_MESSAGE
( "android.intent.action.RESPOND_VIA_MESSAGE
" ) со схемами sms:
, smsto:
, mms:
и mmsto:
. Для этой службы также требуется разрешение SEND_RESPOND_VIA_MESSAGE
.
Без всех четырех ваше приложение не будет отображаться в диалоговом окне выбора SMS по умолчанию.
Ответ 2
Если вы не выполняете все четыре требования, ваше приложение не будет отображаться в качестве стандартного SMS-приложения. Даже если ваше приложение не поддерживает MMS, вы должны добавить его в свой файл. Это не означает, что вы должны реализовать для них действия или услуги или приемники. Добавьте их в свой файл и получите свое SMS-сообщение в качестве стандартного SMS-приложения. Не стесняйтесь игнорировать любые ошибки lint.
<!-- BroadcastReceiver that listens for incoming MMS messages -->
<receiver android:name=".MmsReceiver"
android:enabled="@bool/is_kitkat"
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>