简体   繁体   English

无法将主要活动中的按钮单击操作意图连接到Service类中的待处理意图,以使用.getAction()获得通知中的动作

[英]Can not connect button click action Intent in Main activity to a Pending Intent in Service class to get action in notification using .getAction()

I am trying to connect following MainActivity.java 's buttonclick intents to a pendingIntent in my RathuMakara.java Service class . 我试图将以下MainActivity.java的buttonclick意图连接到我的RathuMakara.java Service类中的endingIntent I tried to use CONSTANTS, but I was not successful. 我尝试使用CONSTANTS,但未成功。 I want to add buttons to notification to control the music. 我想在通知中添加按钮以控制音乐。 So that I know, I should use pending intents, that's why I am trying to connect button click action in MainActivity.java to a pendingIntent in my RathuMakara.java Service class. 因此,我知道我应该使用挂起的意图,这就是为什么我试图将MainActivity.java中的按钮单击操作连接到我的RathuMakara.java Service类中的pendingIntent的原因。

This is MainActivity.java 这是MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnClickListener {


    private Button buttonStart;
    private Button buttonStop;
    public static final String CHANNEL_ID = "exampleServiceChannel";


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

        buttonStart = (Button) findViewById(R.id.buttonStart);
        buttonStop = (Button)findViewById(R.id.buttonSop);

        buttonStart.setOnClickListener(this);
        buttonStop.setOnClickListener(this);

    }








    @Override
    public void onClick(View v) {


        if(v == buttonStart){
            startService(new Intent(this, RathuMakara.class));

            buttonStart.setEnabled(false);
            buttonStop.setEnabled(true);
            Toast.makeText(getApplicationContext(),"Lets's Go... Collecting the Awesomeness",Toast.LENGTH_LONG).show();

        }

        else if (v == buttonStop){
            stopService(new Intent(this, RathuMakara.class));
            Toast.makeText(getApplicationContext(),"Playing Stopped",Toast.LENGTH_LONG).show();

            buttonStop.setEnabled(false);
            buttonStart.setEnabled(true);
        }

    }
}

This is RathuMakara.java 这是RathuMakara.java

public class RathuMakara extends Service {


    public static Object action;
    private MediaPlayer rathu;
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    @Override
    public int onStartCommand(Intent intent,int flags , int startID){

        String url ="http://206.189.34.189:8000/rathumakara.mp3";
        MediaPlayer rathu = new MediaPlayer();
        rathu.setAudioStreamType(AudioManager.STREAM_MUSIC);
        try {
            rathu.setDataSource(url);

            rathu.prepare();

            rathu.start();


            Intent notificationIntent = new Intent(this, MainActivity.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(this,
                    0, notificationIntent, 0);






            Bitmap icon = BitmapFactory.decodeResource(getResources(),
                    R.drawable.logo);


            Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID)
                    .setContentTitle("Rathu Makara FM")
                    .setContentText("දැන් අහන්නේ")
                    .setSmallIcon(R.drawable.logo)
                    .setLargeIcon(icon)
                    .setOngoing(true)
//                   .addAction(android.R.drawable.ic_media_play, "Play", )
                    .setContentIntent(pendingIntent)
                    .build();


            startForeground(1, notification);












        }
        catch (IOException e){

            e.printStackTrace();
        }catch (IllegalArgumentException e){
            e.printStackTrace();
        }catch (SecurityException e){
            e.printStackTrace();
        }catch (IllegalStateException e){
            e.printStackTrace();
        }

        return START_NOT_STICKY;
    }

    @Override
    public void onDestroy(){

        rathu.stop();
    }

}

This is Rathu.java where I created the Notification channel 这是Rathu.java ,我在其中创建了通知频道

package com.example.yomal.rathumakarafm;

import android.app.Application;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.os.Build;

public class Rathu extends Application {

    public static final String CHANNEL_ID = "exampleServiceChannel";

    @Override
    public void onCreate() {
        super.onCreate();

        createNotificationChannel();
    }

    private void createNotificationChannel() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel serviceChannel = new NotificationChannel(
                    CHANNEL_ID,
                    "Example Service Channel",
                    NotificationManager.IMPORTANCE_DEFAULT
            );

            NotificationManager manager = getSystemService(NotificationManager.class);
            manager.createNotificationChannel(serviceChannel);
        }
    }
}

Please Help Me.Thank you 请帮助我。谢谢

Set the notification content 设置通知内容

NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
    .setSmallIcon(R.drawable.notification_icon)
    .setContentTitle(textTitle)
    .setContentText(textContent)
    .setPriority(NotificationCompat.PRIORITY_DEFAULT);

and add action buttons 并添加动作按钮

    Intent snoozeIntent = new Intent(this, MyBroadcastReceiver.class);
    snoozeIntent.setAction(ACTION_SNOOZE);
    snoozeIntent.putExtra(EXTRA_NOTIFICATION_ID, 0);
    PendingIntent snoozePendingIntent =
        PendingIntent.getBroadcast(this, 0, snoozeIntent, 0);

NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
        .setSmallIcon(R.drawable.notification_icon)
        .setContentTitle("My notification")
        .setContentText("Hello World!")
        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
        .setContentIntent(pendingIntent)
        .addAction(R.drawable.ic_snooze, getString(R.string.snooze),
                snoozePendingIntent);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM