sms notification- not working

2019-09-06 15:41发布

I'm stuck with something that seems easy. I want to create a simple app that contains of two buttons: one to start a service and a second one to stop it. I've created my NotifyService class:

public class NotifyService extends Service {
    public NotifyService() {
    }

    private static final String SMS_RECEIVED="android.provider.Telephony.SMS_RECEIVED";

    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            displayNotification(intent);
        }
    };

    private void displayNotification(Intent intent)
    {
       if(intent.getAction().equals(SMS_RECEIVED)) {
           int NOTIFICATION=R.string.local_service_started;

            //notification creating
            Notification.Builder notificationBuilder = new Notification.Builder(this)
                    .setContentText("Otrzymano smsa!")
                    .setContentTitle("SMS!")
                    .setSmallIcon(android.R.drawable.btn_plus);
            Notification note = notificationBuilder.build();

            //getting system service
            NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

            //displaying notification
            notificationManager.notify(NOTIFICATION, note);
       }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        unregisterReceiver(broadcastReceiver);
    }

    @Override
    public void onCreate() {
        super.onCreate();
        registerReceiver(broadcastReceiver,new IntentFilter(SMS_RECEIVED));
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

And here's the code for my MainActivity:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void startServiceBtn(View view)
    {
        Intent intent = new Intent(this,NotifyService.class);
        startService(intent);
    }

    public void stopServiceBtn(View view)
    {
        Intent intent = new Intent(this,NotifyService.class);
        stopService(intent);
    }

And the manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.pablo.myapplication" >

    <uses-permission android:name="android.permission.RECEIVE_SMS"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >
        <activity android:name=".MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <service
            android:name=".NotifyService"
            android:enabled="true"
            android:exported="true" >
        </service>
    </application>

Unfortunately, every time I'm simulating a sending of an sms through Android Device Monitor, it doesn't work, it shows me the default system notification (that by the way is shown even without the permission in manifest- ist that right behavior?)

EDIT: In Android Device Monitor it still keeps showin Permission Denial: ... requires android.permission.RECEIVE_SMS due to sender.com android.... Yet, I've added this into intent filter, then I don't know why it's happening.

1条回答
啃猪蹄的小仙女
2楼-- · 2019-09-06 16:17

The answer to this question was related to some other matters with permissions that I had last times and it's connected with new permission politics with Marshmallow. More info here.

So the problem can be solver by switching to lower sdk version or calling appriopriate methods (look into above link) in runtime.

查看更多
登录 后发表回答