web-dev-qa-db-ja.com

Android KitkatでSMSアプリのデフォルトを設定するにはどうすればよいですか?

Android smsを送受信するsmsアプリをAndroidメッセージングアプリで作成しました。これで、ターゲットを4.4(Android KitKat)に設定しました。バージョン)しかしAndroid KitKatには、ユーザーがメッセージング用に一度に1つのアプリを選択できる新しい「デフォルトのメッセージング」アプリ設定があります。 このサイト からの手順に従って選択しましたデフォルトアプリとしての私のSMSアプリのオプションですが、設定では、デフォルトのメッセージングアプリを選択するポップアップに私のアプリが表示されませんでした。

以下は、GUIDから使用した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>

更新:

注:エミュレーターでテストしています...すべての手順を実行した後、デフォルトのメッセージングアプリAndroid下の画像のように私のものではありません。どんな種類の助けもいただければ幸いです。よろしくお願いします。

enter image description here

13
Zubair Ahmed

指示 あなたが投稿したものは正しかった-問題は、必要な機能のallを実装する必要があるということです:

  • ブロードキャストレシーバーに、SMS_DELIVER_ACTION( "Android.provider.Telephony.SMS_DELIVER")のインテントフィルターを含めます。ブロードキャストレシーバーには、BROADCAST_SMS権限も必要です。これにより、アプリは着信SMSメッセージを直接受信できます。

  • ブロードキャストレシーバーに、MIMEタイプが「WAP_Push_DELIVER_ACTION」のAndroid.provider.Telephony.WAP_Push_DELIVER(「application/vnd.wap.mms-message」)のインテントフィルターを含めます。ブロードキャストレシーバーには、BROADCAST_WAP_Push権限も必要です。これにより、アプリは着信MMSメッセージを直接受信できます。

  • 新しいメッセージを配信するアクティビティには、スキーマ、ACTION_SENDTOAndroid.intent.action.SENDTOsms:、およびsmsto:を含むmms:( "mmsto:")のインテントフィルターを含めます。これにより、アプリはメッセージを配信したい他のアプリからインテントを受け取ることができます。

  • サービスには、スキーマ、ACTION_RESPONSE_VIA_MESSAGEAndroid.intent.action.RESPOND_VIA_MESSAGEsms:、およびsmsto:を含むmms:( "mmsto:")のインテントフィルターを含めます。このサービスには、SEND_RESPOND_VIA_MESSAGE権限も必要です。

4つすべてがないと、アプリはデフォルトのSMS選択ダイアログに表示されません。

12
ianhanniballake

4つの要件をすべて実装していない場合、アプリはデフォルトとしてリストされません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>
4
eyedol