2014-02-12 4 views
13

Я сделал приложение Android для Android, в котором я отправляю и получаю смс в качестве приложения для обмена сообщениями Android. Теперь я установил свою цель в 4.4 (версия Android KitKat), но у Android KitKat есть новые настройки приложения «По умолчанию», которые пользователь может выбрать по одному приложению для обмена сообщениями. Я выполнил шаги с this site, чтобы выбрать параметр для моего приложения sms в качестве приложения по умолчанию, но в настройках моего приложения никогда не появлялось во всплывающем окне выбора приложения для обмена сообщениями по умолчанию.Как установить мое приложение для мобильных телефонов в Android Kitkat?

Ниже мой Java код, который я использовал с GUID

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 не мой, как на изображении ниже. Любые виды помощи будут оценены. Заранее спасибо.

enter image description here

ответ

12

instructions вы вывесили были правы - проблема в том, что вы должны реализовать все необходимых возможностей:

  • В вещательного приемника, включают в себя фильтр намерений для 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 по умолчанию.

+0

Спасибо за ваш ответ я не использую 'MMS' в моем приложении, так что' android.provider.Telephony.WAP_PUSH_DELIVER' я думаю, что его не нужно в случае, также я использую 'Broadcast Receiver' не используется '' обслуживания. –

+0

Поскольку может быть только одно приложение SMS по умолчанию, вы полностью отключите некоторые функции пользователя, если вы не поддерживаете все возможности, следовательно, это необходимо сделать. – ianhanniballake

+0

Здравствуйте, можно ли не показывать диалог «получать sms-приложение по умолчанию» каждый раз, когда я возобновляю, создаю, перезапускаю приложение? так что изменить его автоматически в фоновом режиме? – Nemka

3

Если вы не выполняете все четыре требования, ваше приложение не будет отображаться в качестве стандартного SMS-приложения. Даже если ваше приложение не поддерживает MMS, вы должны добавить его в свой файл. Это не означает, что вы должны реализовать для них действия или услуги или приемники. Добавьте их в свой файл и получите свое SMS-сообщение в качестве стандартного SMS-приложения. Не стесняйтесь игнорировать любые ошибки.

<!-- 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> 
+0

Предположим, что вы правы, но я никогда не использовал класс с именем «MMSReceiver», тогда зачем нам нужен этот '

+0

Это не должно вызывать ошибки. Вы пытались, и это не сработало? Класс 'MMSReceiver' не существует. Предположим, вы хотите создать приемник для MMS, тогда вы должны это реализовать, но поскольку ваше приложение не поддерживает MMS, вам это не нужно. И да, манифестатор ссылок может жаловаться на то, что класс 'MMSReceiver' не существует, вы можете его игнорировать. Если вы не реализуете все четыре требования в вашем файле манифеста, ваше приложение для SMS не будет отображаться в качестве стандартного SMS-приложения на Android 4.4+, как говорилось в @ianhanniballake. – eyedol

+0

Я пробовал все 4 шага, как вы упомянули, но все же я получаю тот же результат ..... –

Смежные вопросы