gpt4 book ai didi

android - 在小部件点击时播放声音

转载 作者:行者123 更新时间:2023-11-29 00:03:03 24 4
gpt4 key购买 nike

这是我的代码,它打开了主 Activity ,但我似乎找不到让小部件播放声音的方法。

我尝试过:

  • 向小部件添加一个按钮(没有用)
  • 向主 Activity 添加一个 OnClickListener(它可以工作,但它会打开主 Activity ,我只想要声音而不是 Activity )
  • 编写一个新方法来播放声音,其中包含 MediaPlayer sound.start() 方法并调用它(没用)

我查看了 android 开发页面,我所能找到的只是如何使用 MediaPlayer,但它没有说明如何从小部件播放音频。

import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.Context;
import android.content.Intent;
import android.widget.RemoteViews;



public class ClockWidget extends AppWidgetProvider {

public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget";

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

super.onUpdate(context, appWidgetManager, appWidgetIds);

final int N = appWidgetIds.length;

for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];

Intent intent = new Intent(context, MainActivity.class);

intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT);

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.clock_widget_layout);

views.setOnClickPendingIntent(R.id.AnalogClock0, pendingIntent);

appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
}

最佳答案

要做到这一点,您需要使用这样调用的服务

Intent svc=new Intent(this, BackgroundSoundService.class);
startService(svc);

public class BackgroundSoundService extends Service {
private static final String TAG = null;
MediaPlayer player;
public IBinder onBind(Intent arg0) {

return null;
}
@Override
public void onCreate() {
super.onCreate();
player = MediaPlayer.create(this, R.raw.trck);
//configure other settings
}
public int onStartCommand(Intent intent, int flags, int startId) {
player.start();
return 1;
}

public void onStart(Intent intent, int startId) {
// TO DO
}
public IBinder onUnBind(Intent arg0) {
// TO DO Auto-generated method
return null;
}

public void onStop() {

}
public void onPause() {

}
@Override
public void onDestroy() {
player.stop();
player.release();
}

}

请在 Manifest 中注册此服务。

<service android:enabled="true" android:name=".BackgroundSoundService" />

你可以在小部件中做这样的事情

public class ClockWidget extends AppWidgetProvider {

private final String ACTION_WIDGET_PLAY = "PlaySong";
private final String ACTION_WIDGET_PAUSE = "PauseSong";
private final String ACTION_WIDGET_STOP = "StopSong";
private final int INTENT_FLAGS = 0;
private final int REQUEST_CODE = 0;

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {

RemoteViews controlButtons = new RemoteViews(context.getPackageName(),
R.layout.main);

Intent playIntent = new Intent(this, BackgroundSoundService.class);

Intent pauseIntent = new Intent(this, BackgroundSoundService.class);

Intent stopIntent = new Intent(this, BackgroundSoundService.class);


PendingIntent playPendingIntent = PendingIntent.getService(
this, REQUEST_CODE, playIntent, INTENT_FLAGS);
PendingIntent pausePendingIntent = PendingIntent.getService(
this, REQUEST_CODE, pauseIntent, INTENT_FLAGS);
PendingIntent stopPendingIntent = PendingIntent.getService(
this, REQUEST_CODE, stopIntent, INTENT_FLAGS);

controlButtons.setOnClickPendingIntent(
R.id.btnPlay, playPendingIntent);
controlButtons.setOnClickPendingIntent(
R.id.btnPause, pausePendingIntent);
controlButtons.setOnClickPendingIntent(
R.id.btnStop, stopPendingIntent);

appWidgetManager.updateAppWidget(appWidgetIds, controlButtons);
}
}

关于android - 在小部件点击时播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49216333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com