2011-02-26 7 views
0

こんにちは私たちはメディアプレーヤーを作っています。今私は、このフローを従う私の通知領域に1つのXMLファイルを入れたいが、私は通知の開始時にnullpointerexceptionを得た。通知時に開始時にヌルポイントを受け取る!

サービスクラス= "MDService。" アンドロイドアンドロイドマニフェストファイルにをサービスを追加:プロセス= "リモート" アンドロイド:名= "MDService">

  1. 次のようにMDSInterface.aidlを作成します。

インタフェースMDSInterface {ボイド 開始()。 void stop(); }

  1. そのリモートビューのMDServiceクラスを作った私は、XMLファイルを追加し、次の通知領域に追加コード

パッケージorg.streamingmusic.mainあります。

輸入android.app.Notification。 インポート 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;インポート android.widget.RemoteViews;

パブリッククラスMDServiceはサービス {

public static NotificationManager 

NMを拡張し、プライベートstatic final int NOTIFY_ID = 1;

@Override public void onCreate(){ super.onCreate(); nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

}

@Override公共ボイドonDestroy(){ nm.cancel(NOTIFY_ID)。 }

/** *遊び歌 でSet通知* @param Trackname * @param Artistname * /パブリック無効 startnot(){通知 通知=新しい通知( R.drawable.icon、 "SMS" 、0)。 RemoteViews contentView =新しいRemoteViews(getPackageName()、R.layout.mindback); notification.contentView = contentView; notification.flags | = Notification.FLAG_NO_CLEAR; notification.flags | = 通知。FLAG_ONGOING_EVENT;

  Intent intent = new Intent(getApplicationContext(), 

StreamingPlayer.class); PendingIntent contentIntent = PendingIntent.getActivity(本、0、 意図、Intent.FLAG_ACTIVITY_NEW_TASK)。 notification.contentIntent = contentIntent; nm.notify(NOTIFY_ID、通知)。 }公共IBinder getBinder(){

return mBinder; 

}

公共最終MDSInterface.Stub mBinder =新しいMDSInterface.Stubは(){ 公共ボイド停止()RemoteExceptionをスロー{// TODO 自動生成されたメソッド・スタブ nm.cancel(NOTIFY_ID)。 }公共ボイド開始は、()はRemoteException {// TODO 自動生成方法スタブを startnot()スロー。 }};

@Override公共IBinder [OnBind]の(意図arg0に){// TODO 自動生成方法スタブ戻り mBinder。 }}

  1. プレイヤーアクティビティでMDServiceクラスのオブジェクトを宣言します。

のpublic static MDSInterface mpInterface。

5.bindサービス

getApplicationContext()bindService( 新しいテント(getApplicationContext()、 MDService.class)、 mConnection、Context.BIND_AUTO_CREATE)。

6.addサービス接続方法。

パブリック静的ServiceConnection mConnection =新しいServiceConnection() {公共ボイド onServiceConnected(コンポーネント名名、 IBinderサービス){mpInterface = MDSInterface.Stub.asInterface((IBinder) サービス)。 }公共ボイド onServiceDisconnected(コンポーネント名 名){mpInterface = NULL; } };

いずれかが、私が欠けているものを私に教えてください?

actully私の目標は、次の前の曲を再生し、puaseと、アプリケーションに行くことができ、そのユーザにnotifiacation領域に機能性を与えることです。 は、通知領域に4つのボタンを追加することを意味します。体がもっと良い方法を持っている場合は共有してください私はpersoneを感謝します。

ありがとうございました。

+0

コードの書式を修正してください。それはまっすぐです。それをSOにコピーして強調表示し、CTRL-Kを押します。今のところそれは読めません。 – EboMike

+0

投稿の書式設定をやり直す必要があります。読めません。コードをもう一度貼り付けますが、中括弧のボタンではなく、中括弧のボタンを使用して書式を設定します。 –

答えて

1

あなたのコードを読まなくても間違いなく、この種のことは通常、以前の呼び出しから返されたnullオブジェクトのメソッドを呼び出すことに起因します。

ストーリーのモラルは、返されたオブジェクトがメソッドを呼び出す前にnullでないことを常にチェックします。

nullの場合は、オブジェクト取得呼び出しでエラーを見つけて解決する必要があります。

+0

こんにちは。ありがとう – milind