1

私はマルチプロファイルシナリオ用のAndroidアプリ開発について学習しており、数秒ごとにトーストメッセージを表示する簡単なサービスを作成しました。サービスはstartForegroundと呼ばれます。サービスからの任意のユーザープロフィールのトースト/通知を表示

期待どおり、トーストメッセージが表示され、通知バー(startForegroundが必要)が通知バーに表示されます。

更新:トーストが答えで推奨されたのと同じアプローチを、以下、ハンドラを使用して示されている:

Handler handler =new Handler(); 
handler.post(new Runnable() { 
public void run() { 
    Toast.makeText(applicationContext, "hi", Toast.LENGTH_LONG).show() 
} 

})。別のユーザープロファイルにログオンするとき

は、しかし、:

  • 通知は、もはや通知バーに存在しない、と
  • 乾杯は表示されなくなりました。

    私はプログラム的に試した:私はそれが出力ログ・メッセージ(adb logcat)に続けて、サービスがまだ実行されている、とトーストが失敗している表示するには、このコールを示すことになるエラー・メッセージがないことを知っている

新しいユーザープロファイルにログオンした後にサービスを停止して再起動しますが、運がない場合があります。新しいユーザープロファイルでアプリケーションを手動で再起動すると、トーストと通知と表示されます。

これはシステムアプリケーションではないため、システムアプリに許可されている許可は受け入れられません。

サービスは、現在のユーザープロファイルに関係なく、サービスからのトーストメッセージを表示できますか?

+0

あなたは__Handler__または__Broadcastを使用する必要がありますReceiver__を使用してUIを更新します。 – Piyush

+0

ありがとう@Piyush Gupta。私はHandlerを使用しています(それを反映するために質問を更新しました)。これが最初のユーザープロファイルからトーストを表示する方法でした。それは正常に動作しますが、2番目のプロファイルに切り替えると、トーストは表示されなくなります。 –

答えて

0

Toast from Serviceを表示することはできません。 UIスレッドだけがUI関連のことを行うことができ、ToastもUIです。詳細については、Communicating with the UI Threadを参照してください。

あなたはこのアプローチを試すことができます。

はあなたのサービスに追加します。

protected Handler mHandler = new Handler(); 

、その後、あなたはトーストを表示するRunnableを投稿する必要があります。

mHandler.post(new Runnable() { 
    public void run() { 
     Toast.makeText(applicationContext, "hi", Toast.LENGTH_LONG).show() 
    } 
}); 
+0

ありがとうMarcin、私はそれを正確にやっているし、それを明確にするために質問を更新しました。問題は、アプリを起動したユーザープロフィールでこれが動作している(トーストが表示されている)間に、別のプロフィールに切り替えるとトーストが表示されなくなることです。トーストがプロファイル全体に表示されるようにこのコードを変更することはできますか?それとも良い方法がありますか? –

関連する問題