1

Ich entwickle eine SMS-Blockier-App. Was gut zu Jelly-Bean funktioniert. Und es funktioniert nicht von Kitkat bis Marshmallow. Ich suchte auf Google und jeder, der empfahl, Erlaubnis vom Benutzer zu nehmen, um es Standard-Sms-Anwendung dieses Telefons zu machen, indem er verwendete.Android - wie ich meine App Standard-SMS-App programmgesteuert machen

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); 
       } 
      } 

Manifest-Datei:

<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> 

ich verwendet, um dieses Codebeispiel. Es zeigt einen Dialog mit der Messaging App des Telefons. Meine App wird nicht in dieser Liste angezeigt.

Jetzt möchte ich meine App auch auf dieser Liste zeigen, so dass Benutzer meine App aus dieser Liste auswählen können und es wird Standard-SMS-App dieses Telefons sein. Wie kann ich das machen. Bitte antworten Sie mit Beispiel/Codebeispiel. Vielen Dank.

+1

http://android-developers.blogspot.com/2013/10/getting-your-sms-apps-ready-for-kitkat.html – CommonsWare

+0

Ich folgte ihm, aber nicht funktioniert. Meine App wird nicht im Listendialog angezeigt. –

+1

Dann poste dein gesamtes Manifest.Angeben des Blogposts, mit dem ich verlinkt habe: Damit Ihre App in den Systemeinstellungen als zulässige Standard-SMS-App angezeigt wird, muss die Manifestdatei bestimmte Funktionen deklarieren. Sie haben bisher nur eine davon in Ihrer Frage angezeigt. – CommonsWare

Antwort

6

ich es folgte

nach nicht an den Code in Ihrer Frage. Lassen Sie uns die vier Anforderungen von the blog post Bewertung:

In einem Rundfunkempfänger, gehören Intent-Filter für SMS_DELIVER_ACTION ("android.provider.Telephony.SMS_DELIVER"). Der Broadcast-Empfänger muss ebenfalls die Berechtigung BROADCAST_SMS haben.

Sie haben dies in Form Ihres PhoneStateReceiver.

in einem Rundfunkempfänger, umfassen eine Absicht Filter für WAP_PUSH_DELIVER_ACTION ("android.provider.Telephony.WAP_PUSH_DELIVER") mit dem MIME-Typ "application/vnd.wap.mms-message". Der Broadcast-Empfänger muss ebenfalls die Berechtigung BROADCAST_WAP_PUSH haben.

Sie haben dies nicht.

In Ihrer Tätigkeit, die neue Nachrichten liefert, gehören Intent-Filter für ACTION_SENDTO ("android.intent.action.SENDTO") mit Schemata, SMS :, ​​smsto :, mms :, und mmsto :.

Sie haben dies in Form von DashboardActivity.

In einem Dienst, umfassen eine Absicht Filter für ACTION_RESPONSE_VIA_MESSAGE ("android.intent.action.RESPOND_VIA_MESSAGE") mit Schemata, SMS :, ​​smsto :, mms :, und mmsto :. Für diesen Dienst muss außerdem die Berechtigung SEND_RESPOND_VIA_MESSAGE erforderlich sein.

Sie haben dies in Form von HeadlessSmsSendService.

Also, fügen Sie eine <receiver> für WAP_PUSH_DELIVER_ACTION, folgen Sie den Anweisungen, und sehen Sie, ob das hilft.

+0

Vielen Dank. Es klappt. –

Verwandte Themen