我制作了一个媒体播放器。现在,我想在我的通知区域中放置一个XML文件。为此,我遵循了这个流程,但在开始通知时我得到了NullPointerException
。
1. 在Android清单文件中添加服务
service class=".MDService"
android:process=":remote"
android:name=".MDService"
2。按如下方式创建MDSInterface.aidl
interface MDSInterface {
void start();
void stop();
}
3。为远程视图创建了一个MDService
类,并在其中添加了一个XML文件并添加了一个通知区域。以下是代码
package org.streamingmusic.main;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.os.DeadObjectException;
import android.os.IBinder;
import android.os.RemoteException;
import android.widget.RemoteViews;
public class MDService extends Service
{
public static NotificationManager nm;
private static final int NOTIFY_ID = 1;
@Override
public void onCreate() {
super.onCreate();
nm =(NotificationManager)
getSystemService(NOTIFICATION_SERVICE);
}
@Override
public void onDestroy() {
nm.cancel(NOTIFY_ID);
}
/**
* Set notification on play song
* @param Trackname
* @param Artistname
*/
public void startnot() {
Notification notification = new Notification(R.drawable.icon, "SMS", 0);
RemoteViews contentView = new RemoteViews(getPackageName(),R.layout.mindback);
notification.contentView = contentView;
notification.flags |= Notification.FLAG_NO_CLEAR;
notification.flags |= Notification.FLAG_ONGOING_EVENT;
Intent intent = new Intent(getApplicationContext(), StreamingPlayer.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
notification.contentIntent=contentIntent;
nm.notify(NOTIFY_ID, notification);
}
public IBinder getBinder() {
return mBinder;
}
public final MDSInterface.Stub mBinder = new MDSInterface.Stub() {
public void stop() throws RemoteException {
// TODO Auto-generated method stub
nm.cancel(NOTIFY_ID);
}
public void start() throws RemoteException {
// TODO Auto-generated method stub
startnot();
}
};
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return mBinder;
}
}
4. 在玩家活动中声明MDService
类的对象
public static MDSInterface mpInterface;
5. 绑定服务
getApplicationContext().bindService(new Intent(
getApplicationContext(), MDService.class),
mConnection, Context.BIND_AUTO_CREATE);
6. 添加服务连接方法
public static ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName name, IBinder service) {
mpInterface = MDSInterface.Stub.asInterface((IBinder)service);
}
public void onServiceDisconnected(ComponentName name) {
mpInterface = null;
}
};
拜托,谁能告诉我我错过了什么?
实际上,我的目标是在通知区域中提供功能,以便用户可以播放下一首或上一首歌曲,暂停歌曲,还可以转到应用程序。 这意味着在通知区域中添加四个按钮。如果有人有更好的方法,请分享。我很感激。
感谢。
答案 0 :(得分:2)
无可否认,在没有费心阅读代码的情况下,这种情况通常是由于尝试调用前一次调用返回的null对象的方法而产生的。
故事的道德总是在调用方法之前检查返回的对象是否为空!
如果它们为null,则需要通过对象检索调用找出并解决错误。