2016-11-13 29 views
0

私はBroadcastReceiverを持ち、他のアプリケーションから通知を受け取るアプリケーションを持っています。問題は、Toast経由で電話にメッセージを表示していますが、TextViewに表示するように設定したいのです。私は全アプリで2つのクラスしか持っていません。バックグラウンドプロセスでtextViewにテキストを設定する

@Override 
public void onReceive(Context context, Intent intent) { 
    String value = intent.getExtras().getString("hiddenMessage"); 
    MainActivity.getInstace().updateTheTextView(value); 
} 

ここでのTextViewを更新するメソッドのコードがあります:

私の受信機は、BroadcastReceiverを拡張し、そのonReceive方法は次のようになり、私自身のクラスです。このメソッドは、MainActivityクラスである:私は1つのアプリからの通知を送信し、ここでそれを受信したときに問題がある

public void updateTheTextView(final String textFromNotification) { 
    final Context context = this; 

    Toast toast = Toast.makeText(context, "Message received: " + textFromNotification, Toast.LENGTH_LONG); 
    toast.show(); 

    ((Activity) context).runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      textV1.setText(textFromNotification); 
     } 
    }); 
} 

、テキストは表示されません。このアプリが開いているときのみ表示されます。アプリが開いていないときにテキストをフィールドに設定するにはどうすればよいですか?いくつかのクラスフィールドにメッセージを格納し、onResumeメソッドでsetText()を使用しますか?

+0

上記のコードはどこにありますか?ブロードキャストレシーバインスタンスが作成され、同じクラスに登録/登録解除されていますか? – clownba0t

+0

sharedpreferencesに保存してonCreateをロード – uguboz

+0

@ clownba0t質問を更新し、さらに情報を追加しました。 – TheOpti

答えて

0

onRecieve方法の第一は、SQL

private void saveNotification(String msg) { 
    //notification_sql class to save detail 
    Notification_sql n=new Notification_sql(getApplicationContext()); 
    Notification_detail notification_detail=new Notification_detail(); 
    //notification detail model class to set and get get detail 
    notification_detail.setData(msg); 
    n.adddetail(notification_detail); 
    } 

セカンドで詳細を保存するデータベースに

public String adddetail(Notification_detail dataval){ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(DATE_OF_ENTRY,dataval.getData()); 
    // Inserting Row 
    db.insert(TABLE_NAME, null, values); 
    db.close(); // Closing database connection 
    return null; 
    } 

を詳細に保存する主な活動におけるタスクshedulerを使用してデータあなたのonReceiveで

scheduleTaskExecutor= Executors.newScheduledThreadPool(5); 
    // This schedule a task to run every 10 minutes: 
     scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() { 
     public void run() { 
      // If you need update UI, simply do this: 
      runOnUiThread(new Runnable() { 
       public void run() { 
        //update text view 
        Notification_sql meter_data=new Notification_sql(MapsActivity.this); 
        //getting detail from database which is saved just after message delivery 
        List<Notification_detail> contacts = meter_data.getDetail(); 
        //System.out.println(contacts); 
        for (Notification_detail cn : contacts) { 
         String data=cn.getData(); 

         txtdetail.setText(data) 
        } 
       } 
      }); 
     } 
     }, 0, 10, TimeUnit.SECONDS); 
1

を取得このメソッドは、文字列値を取得した後にsharedPreferenceに格納します。

public void saveInSharedPreferences(String value){ 
    SharedPreferences sharedpreferences = getSharedPreferences("sharedPref", Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedpreferences.edit(); 
    editor.putString("variable",value);//your String value 
    editor.commit(); 
} 

あなたのonReceive方法は

public void onReceive(Context context, Intent intent) { 
    String value = intent.getExtras().getString("hiddenMessage"); 
    saveInSharedPreferences(value); 
} 

ようにし、あなたの活動ののonCreateメソッドになります

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

    String value = getValueFromSharedPreference(); 
    if(value != null){ 
      textview.setText(value); 
    } 
} 

getValueFromSharedPreference方法

public String getValueFromSharedPreference(){ 
     SharedPreferences sharedpreferences = getSharedPreferences("sharedPref", Context.MODE_PRIVATE); 

     return sharedpreferences.getString("variable",null); 
} 
今、あなたは、あなたのアプリが
は、OnCreateの方法

外で、あなたの活動のOnCreateの方法では、あなたの活動のクラスで、その後

registerReceiver(broadcastReceiver, new IntentFilter("broadcast")); 

とをこの

public void onReceive(Context context, Intent intent) { 
    String value = intent.getExtras().getString("hiddenMessage"); 
    saveInSharedPreferences(value); 
    Intent intent = new Intent("broadcast"); 
    intent.putExtra("variable",value); 
    context.sendBroadCast(intent); 
} 

を試してみて、開いているときのTextViewを更新したい場合は

BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

      String value = intent.getStringExtra("variable"); 
      textview.setText(value); 
    } 
}; 

またはこのインターフェイスソリューションを使用することもできます:https://stackoverflow.com/a/26268569/6799807

+0

私が理解するように、これは私のアプリケーションを開くと私のtextViewを更新します。私のアプリが既に開いている場合はどうすればいいですか? – TheOpti

+0

別の質問は、どうすればBroadcastReceiverだけを拡張する別のクラスでgetSharedPreferencesメソッドを使用できますか? getSharedPreferencesはコンテキストからです...? – TheOpti

+0

あなたはBroadcastReceiverクラスを拡張し、次にsharedpreferenceであなたのクラスにsaveInSharedPreferencesメソッドを置くことができます。コンテキスト –

関連する問題