#android #android-studio #android-fragments #android-notifications #onesignal
#Android #android-studio #android-фрагменты #android-уведомления #onesignal
Вопрос:
я использую один сигнал для отправки уведомления в firebase
я добавил этот код в mainactivity
// Logging set to help debug issues, remove before releasing your app.
OneSignal.setLogLevel(OneSignal.LOG_LEVEL.VERBOSE, OneSignal.LOG_LEVEL.NONE);
// OneSignal Initialization
OneSignal.startInit(this)
.inFocusDisplaying(OneSignal.OSInFocusDisplayOption.Notification)
.unsubscribeWhenNotificationsAreDisabled(true)
.init();
и это работает
но я создаю панель нижней навигации с фрагментами
и уведомление теперь не сработало
я попытался добавить его в TrackFragment.java но это не сработало
это TrackFrgament
package mypacgae.name.com;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import androidx.fragment.app.Fragment;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
/**
* A simple {@link Fragment} subclass.
* Use the {@link TrackFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class TrackFragment extends Fragment {
LinearLayout eLinearLayout;
WebView webView;
ProgressBar mProgressBar;
SwipeRefreshLayout swipeRefreshLayout;
// TODO: Rename parameter arguments, choose names that match
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
// TODO: Rename and change types of parameters
private String mParam1;
private String mParam2;
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @param param1 Parameter 1.
* @param param2 Parameter 2.
* @return A new instance of fragment TrackFragment.
*/
// TODO: Rename and change types and number of parameters
public static TrackFragment newInstance(String param1, String param2) {
TrackFragment fragment = new TrackFragment();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
public TrackFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_track, container, false);
webView = (WebView) v.findViewById(R.id.webview);
eLinearLayout = (LinearLayout) v.findViewById(R.id.LinearWebView);
mProgressBar = (ProgressBar) v.findViewById(R.id.progressBar);
swipeRefreshLayout = (SwipeRefreshLayout) v.findViewById(R.id.swipeweb);
webView.loadUrl("the url of webview no need to show it");
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setUseWideViewPort(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setSupportZoom(false);
webView.getSettings().setAllowFileAccess(true);
webView.getSettings().setAllowContentAccess(true);
webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
return false;
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
super.onReceivedError(view, request, error);
eLinearLayout.setVisibility(View.VISIBLE);
view.setVisibility(View.GONE);
}
@Override
public boolean shouldOverrideUrlLoading(WebView wv, String url) {
if (url.startsWith("tel:") || url.startsWith("whatsapp:")) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
return true;
}
return false;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
mProgressBar.setVisibility(View.VISIBLE);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
mProgressBar.setVisibility(View.GONE);
}
});
// pull to refresh
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
swipeRefreshLayout.setRefreshing(true);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
swipeRefreshLayout.setRefreshing(false);
webView.loadUrl("the url . no need to show it");
}
}, 1500);
}
});
swipeRefreshLayout.setColorSchemeColors(
getResources().getColor(android.R.color.holo_blue_dark),
getResources().getColor(android.R.color.holo_orange_dark),
getResources().getColor(android.R.color.holo_green_dark),
getResources().getColor(android.R.color.holo_red_dark)
);
return v;
}
}
и этот mainactivityt
пожалуйста, помогите и спасибо всем вам
Ответ №1:
Попробуйте создать класс приложения в вашем основном пакете:
class ApplicationClass : Application() {
override fun onCreate() {
super.onCreate()
FirebaseApp.initializeApp(this);
// OneSignal Initialization
OneSignal.startInit(this)
.inFocusDisplaying(OneSignal.OSInFocusDisplayOption.Notification)
.unsubscribeWhenNotificationsAreDisabled(true)
.init()
}
}
затем объявите это в своем манифесте, а затем попробуйте :
<application
android:allowBackup="true"
android:icon="@mipmap/appicon"
android:label="@string/app_name"
android:largeHeap="true"
android:roundIcon="@mipmap/appicon"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:name=".ApplicationClass">
и убедитесь, что вы правильно внедрили библиотеки и заполнители манифеста в свою сборку.gradle:
defaultConfig {
applicationId "com.codediversity.doodhwale"
minSdkVersion 16
targetSdkVersion 29
versionCode 6
versionName "1.0.5"
multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
manifestPlaceholders = [
onesignal_app_id: '4xxxxxxx4-8bcd-xxxxx-8c6d-3xxxx7155d',
// Project number pulled from dashboard, local value is ignored.
onesignal_google_project_number: 'REMOTE'
]
}
implementation 'com.onesignal:OneSignal:[3.15.0, 3.99.99]'
implementation 'com.google.firebase:firebase-analytics:17.2.2'
Комментарии:
1. в вашем основном пакете
2. вы можете создать новый класс в своем основном пакете, потому что нам нужен класс приложения, чтобы объявить его в манифесте