0

別のアクティビティのテキストビューからコンテンツを取得して、通知バー メッセージに表示しようとしています。動作しますが、正しくはありません。テキストビューからの文字列は通知に表示されます。他のアクティビティのテキストビューからの情報をバンドルし、通知マネージャーにバンドルを取得させることでそれを行っています。問題は、他のアクティビティが起動されたときに発生します。アクティビティのコードの最後のチャンクがバンドルと送信を行うため、通知が発生し、設定された起動時間を無視して通知が発生します。だから私の質問は、通知が別のアクティビティから文字列を取得するための最良かつ最も簡単な方法は何ですか? これが問題であるアクティビティです。それ自体で通知を発生させます。

    import java.io.IOException;

import android.app.Activity;
import android.app.NotificationManager;
import android.content.Intent;
import android.database.SQLException;
import android.os.Bundle;
import android.widget.TextView;

public class DBTest2 extends Activity {

String scrNote;
TextView showBV;
NotificationManager nm;
DBAdapter dba;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.dbtest_2);
    showBV = (TextView) findViewById(R.id.getBK_TV);

    nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    //---cancel the notification---
    try{
    nm.cancel(getIntent().getExtras().getInt("uID"));
    } catch (Exception e) {
        System.out.println("Error when cancelling: "+e.toString());
    }
    //---END cancel the notification---



    //---- SHOW IN NOTIFICATION------

    scrNote = showBV.getText().toString();
    Bundle moveScrNote = new Bundle();
    moveScrNote.putString("mSN", scrNote);
    Intent toNoteBody = new Intent(DBTest2.this, DisplayNotifications.class);
    toNoteBody.putExtras(moveScrNote);
    startActivity(toNoteBody);


    //---- END   SHOW IN NOTIFICATION------


}


}

通知マネージャーは次のとおりです。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //---get the notification ID for the notification; 
    // passed in by the MainActivity---
    int uID = getIntent().getExtras().getInt("uniqueID");

    //---PendingIntent to launch activity
    Intent noteI = new Intent("com.vee.search01.DBTEST2");
    noteI.putExtra("uniqueID", uID);

    PendingIntent herroIntent = 
        PendingIntent.getActivity(this, 0, noteI, 0);

    nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    long fireTime = System.currentTimeMillis();
    String noteTitle = "Notification Title";

    Bundle getNoteBody = getIntent().getExtras();
    String gotNoteBody = getNoteBody.getString("mSN");
    String noteBody = gotNoteBody;

    Notification note = new Notification(R.drawable.noteicon, noteTitle, fireTime);
    note.setLatestEventInfo(this, noteTitle, noteBody, herroIntent);
    note.defaults |= Notification.DEFAULT_SOUND;
    note.defaults |= Notification.FLAG_SHOW_LIGHTS;
    nm.notify(uID, note);
    finish();
}

}
4

1 に答える 1

1

アクティビティ間でコンテンツを転送する最良の方法は、Intent のエクストラ経由で送信することです。

アクティビティ A から通知を発行し、それをアクティビティ B で処理する場合は、A で通知を作成し、B を開始するインテントを含む PendingIntent を挿入します。通知が表示され、ユーザーがそれをクリックすると、B は解雇されます。

B から A に通知テキストを送信する場合は、別の Intent を使用します。

通知インテントのテキストを B に送信し、通知を表示しようとしている場合は、テキストをインテントのエクストラに入れます。

また、プラットフォームの最新バージョンを使用している場合は、Notification のリファレンス ドキュメントを参照してください。Notification.Builder を介して通知を作成することを支持して廃止されました。1 つの利点は、通知を自動キャンセルに設定できるため、コードでキャンセルする必要がないことです。

于 2012-06-07T23:47:26.557 に答える