Benachrichtigung, Service, Firebase Console Messaging

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Benachrichtigung, Service, Firebase Console Messaging

    Hallo,
    ich programmiere gerade, wenn ich auf eine Benachrichtigung klicke, dann soll sich eine Webseite im webview öffnen. Wenn ich auf die Benachrichtigung klicke, dann stürz die App ab und folgender Fehler kommt.

    [MainActivity.java

    Java-Quellcode: MainActivity.java

    1. package net.villi_designs.nexusprimeapp;
    2. import android.content.Intent;
    3. import android.os.Bundle;
    4. import android.support.design.widget.FloatingActionButton;
    5. import android.view.View;
    6. import android.support.design.widget.NavigationView;
    7. import android.support.v4.view.GravityCompat;
    8. import android.support.v4.widget.DrawerLayout;
    9. import android.support.v7.app.ActionBarDrawerToggle;
    10. import android.support.v7.app.AppCompatActivity;
    11. import android.support.v7.widget.Toolbar;
    12. import android.view.Menu;
    13. import android.view.MenuItem;
    14. import android.webkit.WebView;
    15. import android.webkit.WebViewClient;
    16. import com.google.firebase.messaging.FirebaseMessaging;
    17. public class MainActivity extends AppCompatActivity
    18. implements NavigationView.OnNavigationItemSelectedListener {
    19. public static View view2;
    20. public static View view1;
    21. @Override
    22. protected void onCreate(Bundle savedInstanceState) {
    23. super.onCreate(savedInstanceState);
    24. setContentView(R.layout.activity_main);
    25. Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    26. setSupportActionBar(toolbar);
    27. FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    28. fab.setOnClickListener(new View.OnClickListener() {
    29. @Override
    30. public void onClick(View view) {
    31. Intent emailintent = new Intent(Intent.ACTION_SEND);
    32. String[] recipients = new String[]{"support@villi-designs.net", "",};
    33. emailintent.putExtra(Intent.EXTRA_EMAIL, recipients);
    34. emailintent.putExtra(Intent.EXTRA_SUBJECT, "Verbesserungen an App Nexus Prime");
    35. emailintent.setType("text/plain");
    36. startActivity(Intent.createChooser(emailintent, "Send mail..."));
    37. }
    38. });
    39. DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    40. ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
    41. this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    42. drawer.setDrawerListener(toggle);
    43. toggle.syncState();
    44. NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    45. navigationView.setNavigationItemSelectedListener(this);
    46. WebView web = (WebView) findViewById(R.id.webview1);
    47. WebView webb = (WebView) findViewById(R.id.webview2);
    48. web.setWebViewClient(new WebViewClient());
    49. web.loadUrl("http://nexusprime.de/");
    50. web.getSettings().setJavaScriptEnabled(true);
    51. FirebaseMessaging.getInstance().subscribeToTopic(FCM_Instens_ID_services.infotoppikname);
    52. }
    53. @Override
    54. public void onBackPressed() {
    55. DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    56. if (drawer.isDrawerOpen(GravityCompat.START)) {
    57. drawer.closeDrawer(GravityCompat.START);
    58. } else {
    59. super.onBackPressed();
    60. }
    61. }
    62. @Override
    63. public boolean onCreateOptionsMenu(Menu menu) {
    64. // Inflate the menu; this adds items to the action bar if it is present.
    65. getMenuInflater().inflate(R.menu.main, menu);
    66. return true;
    67. }
    68. @Override
    69. public boolean onOptionsItemSelected(MenuItem item) {
    70. // Handle action bar item clicks here. The action bar will
    71. // automatically handle clicks on the Home/Up button, so long
    72. // as you specify a parent activity in AndroidManifest.xml.
    73. int id = item.getItemId();
    74. //noinspection SimplifiableIfStatement
    75. if (id == R.id.action_settings) {
    76. //Snackbar.make(findViewById(R.id.drawer_layout), "Topic aboniert", Snackbar.LENGTH_SHORT).show();
    77. }
    78. return super.onOptionsItemSelected(item);
    79. }
    80. @SuppressWarnings("StatementWithEmptyBody")
    81. @Override
    82. public boolean onNavigationItemSelected(MenuItem item) {
    83. WebView web = (WebView) findViewById(R.id.webview1);
    84. WebView webb = (WebView) findViewById(R.id.webview2);
    85. //webview1
    86. web.setWebViewClient(new WebViewClient());
    87. web.getSettings().setJavaScriptEnabled(true);
    88. view1 = (WebView) findViewById(R.id.webview1);
    89. //webview1
    90. webb.setWebViewClient(new WebViewClient());
    91. webb.getSettings().setJavaScriptEnabled(true);
    92. view2 = (WebView) findViewById(R.id.webview2);
    93. int id = item.getItemId();
    94. if (id == R.id.start) {
    95. web.loadUrl("http://www.nexusprime.de/");
    96. view2.setVisibility(View.INVISIBLE);
    97. view1.setVisibility(View.VISIBLE);
    98. } else if (id == R.id.apply) {
    99. web.loadUrl("http://www.nexusprime.de/apply/");
    100. view2.setVisibility(View.INVISIBLE);
    101. view1.setVisibility(View.VISIBLE);
    102. } else if (id == R.id.forum) {
    103. web.loadUrl("http://www.nexusprime.de/forum/");
    104. view2.setVisibility(View.INVISIBLE);
    105. view1.setVisibility(View.VISIBLE);
    106. } else if (id == R.id.coki) {
    107. web.loadUrl("http://www.nexusprime.de/?page_id=53");
    108. view2.setVisibility(View.INVISIBLE);
    109. view1.setVisibility(View.VISIBLE);
    110. } else if (id == R.id.shop) {
    111. webb.loadUrl("http://shop.nexusprime.de/");
    112. view2.setVisibility(View.VISIBLE);
    113. view1.setVisibility(View.INVISIBLE);
    114. } else if (id == R.id.login) {
    115. web.loadUrl("http://www.nexusprime.de/login/");
    116. view2.setVisibility(View.INVISIBLE);
    117. view1.setVisibility(View.VISIBLE);
    118. } else if (id == R.id.nav_share) {
    119. Intent shahre = new Intent(Intent.ACTION_SEND);
    120. shahre.putExtra(Intent.EXTRA_TEXT, "Installiere dir jetzt die Nexus Prime App: http://nexusprime.de/?page_id=157");
    121. shahre.setType("text/plain");
    122. startActivity(Intent.createChooser(shahre, "Teilen Via..."));
    123. } else if (id == R.id.nav_send) {
    124. Intent emailintent = new Intent(Intent.ACTION_SEND);
    125. String[] recipients = new String[]{"support@villi-designs.net", "",};
    126. emailintent.putExtra(Intent.EXTRA_EMAIL, recipients);
    127. emailintent.putExtra(Intent.EXTRA_SUBJECT, "Verbesserungen an App Nexus Prime");
    128. emailintent.setType("text/plain");
    129. startActivity(Intent.createChooser(emailintent, "Send mail..."));
    130. }
    131. DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    132. drawer.closeDrawer(GravityCompat.START);
    133. return true;
    134. }
    135. public static boolean showweb(){
    136. final WebView wv1 = (WebView) view1.findViewById(R.id.webview1);
    137. final WebView wv2 = (WebView) view2.findViewById(R.id.webview2);
    138. wv1.loadUrl("http://www.nexusprime.de/update/");
    139. wv1.setWebViewClient(new WebViewClient());
    140. wv1.getSettings().setJavaScriptEnabled(true);
    141. wv1.setVisibility(View.VISIBLE);
    142. wv2.setVisibility(View.INVISIBLE);
    143. return true;
    144. }
    145. }
    Alles anzeigen



    Ich hoffe mir kann jemand helfen.
    Dateien
    • error.txt

      (3,1 kB, 46 mal heruntergeladen, zuletzt: )
  • Hallo Bitte bescheibe etwas genauer wann bzw. bei welchen Button das gescheid.
    Im ErrorText steht das du einen Nullpointer bekommst ,in folge auf eine nicht aufgelöste ID, aus einer findViewById() Methode. Da keine layout XML dabei ist kann ich auch nicht sagen ob alle von dir benutsten ID,s auch im Layout sind.
    Ein Feedback auf Tipps ist auch schön. :P
  • Ich schicke eine Benachrichtigung über php an meine app. Über firebase. Und wen ich auf diese Benachrichtigung klicke wird ein Service über einen Intent bzw über einen PendingIntent gestartet. Der service soll ein webview die url laden bzw ändern. nur wenn man auf die Benachrichtigung klickt stürz die app ab und in android studio im Android monitor kommt der error.

    Java-Quellcode: FCM_Messining_Servic.java

    1. package net.villi_designs.nexusprimeapp;
    2. import android.app.Notification;
    3. import android.app.NotificationManager;
    4. import android.app.PendingIntent;
    5. import android.content.Intent;
    6. import android.graphics.BitmapFactory;
    7. import android.graphics.Color;
    8. import android.media.RingtoneManager;
    9. import android.net.Uri;
    10. import android.support.v4.app.NotificationCompat;
    11. import com.google.firebase.messaging.FirebaseMessagingService;
    12. import com.google.firebase.messaging.RemoteMessage;
    13. /**
    14. * Created by witze on 11.07.2017.
    15. */
    16. public class FCM_Messining_Servic extends FirebaseMessagingService{
    17. @Override
    18. public void onMessageReceived(RemoteMessage remoteMessage) {
    19. super.onMessageReceived(remoteMessage);
    20. if(remoteMessage.getFrom().equals("/topics/" + FCM_Instens_ID_services.infotoppikname)){
    21. displaynotification(remoteMessage.getData().get("titel"), remoteMessage.getData().get("text"));
    22. }
    23. }
    24. private void displaynotification(String titel, String text){
    25. Uri notificationsound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    26. Intent notintent = new Intent(this, updateweb.class);
    27. PendingIntent notpendingIntent = PendingIntent.getService(this, 0, notintent, 0);
    28. Notification notification = new NotificationCompat.Builder(this)
    29. .setContentTitle(titel)
    30. .setContentText(text)
    31. .setSmallIcon(R.drawable.ic_notify)
    32. .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.cropped_nexus))
    33. .setColor(getResources().getColor(R.color.colorPrimary))
    34. .setVibrate(new long[]{0,300, 300, 300})
    35. .setLights(Color.YELLOW, 1000, 5000)
    36. .setContentIntent(notpendingIntent)
    37. .setAutoCancel(true)
    38. .setPriority(NotificationCompat.PRIORITY_HIGH)
    39. .setStyle(new NotificationCompat.BigTextStyle().bigText(text))
    40. .setSound(notificationsound)
    41. .build();
    42. NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    43. notificationManager.notify(14, notification);
    44. }
    45. }
    Alles anzeigen
  • Hi
    1.) denke die Zeile muss so lauten.
    Der Objekttyp solte auch mit dem Objekt übereinstimmen.
    NotificationCompat.Builder notification = new NotificationCompat.Builder(this) .....

    2.) "Intent notintent = new Intent(this, updateweb.class);"
    ist das Richtig Klassen müssen doch gross gechrieben werden meine Ich.

    Wird denn deine Klasse überhaupt aufgerufen teste mit dem Debuger.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jogimuc ()

  • Ich habe jetzt beim service "updateweb" einfach nur ein Toast gemacht und der wurde Toast angezeigt(youtu.be/9HmLYX_26g4). Heist der servic wird gestartet. Jetzt will ich in dem service das die app gestartet wird und dann der webview1 auf die url "http://www.nexusprime.de/update/" gesetzt wird.

    Quellcode: updateweb.java

    1. package net.villi_designs.nexusprimeapp;
    2. import android.app.Service;
    3. import android.content.Intent;
    4. import android.os.IBinder;
    5. import android.support.annotation.IntDef;
    6. import android.view.View;
    7. import android.webkit.WebView;
    8. import android.webkit.WebViewClient;
    9. import android.widget.LinearLayout;
    10. import android.widget.RelativeLayout;
    11. import android.widget.Toast;
    12. public class updateweb extends Service {
    13. @Override
    14. public IBinder onBind(Intent intent) {
    15. // TODO: Return the communication channel to the service.
    16. throw new UnsupportedOperationException("Not yet implemented");
    17. }
    18. @Override
    19. public int onStartCommand(Intent intent, int flags, int startId) {
    20. Toast.makeText(this, "Tost", Toast.LENGTH_SHORT).show();
    21. stopSelf();
    22. return super.onStartCommand(intent, flags, startId);
    23. }
    24. }
    Alles anzeigen
  • ok du schreibst Klassen klein.
    Der Fehler passt auch zu dem errortext. Denn in einem Servicre bist du nicht im ui thead. Benutze einen Händler oder eine callback Methode um auf die ui deiner Activity zu kommen.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jogimuc ()

  • Zum ersten Punkt ich meinte Klassen fangenen eigentlich mit einen Großen Buchtaben an.

    Wenn du auf die auf die Nachricht klickst wird ein Service gestartet. So wie du es in deinem intent auch willst. Nur das ein Service nicht auf dem ui thread heißt auf Benutzeroberfläche läuft. Und du somit keine Ausgaben machen kannst. Dafür benutz man handler der auf der Benutzeroberfläche läuft. Oder eine callback Methode die in deiner acktivity läuft somit auch auf dem ui thread. Und wenn du vorher ich meine vor der Version mit dem Toast eine Ausgabe in eine View gemacht hast ist es kein Wunder das du dabei einen nullpointer bekommen hast dem im Service ist kein layout geladen.

    Aber wenn du deine activity starten willst wie so startest du dann den Service. Normalerweise startet man die aktivity .Dafür ändere einfach den intent

    "Intent notintent = new Intent(this, updateweb.class);." in dem du hier die classe deiner activity angiebst.

    Hoffe es ist jetzt etwas besser verständlich.
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jogimuc ()