[英]Launching MainActivity after SplashActivity closes Android app
我在xamarin中工作,試圖制作一個Android項目。
我正在嘗試學習Android,但有點卡住了。 我有一個MainActivity,它曾經是在應用啟動時啟動的活動。 現在,我添加了一個初始屏幕,這意味着另一個活動,但是我顯然希望它是已啟動的活動,並在一段時間后啟動主要活動。 它首先啟動了啟動活動。 好。 當它嘗試從啟動活動啟動主要活動時,它將關閉。 我正在使用xamarin手冊中的示例通過一些較小的調整來進行此啟動活動,例如使其繼承Activity而不是AppCompActivity。
https://developer.xamarin.com/guides/android/user_interface/creating_a_splash_screen/
請注意,MainActivity在一段時間內運行良好,它只是崩潰或關閉,因為它不是主要的啟動器應用程序活動。
我知道我只是缺少一個重要的條目,這可能與清單文件或CS文件中缺少聲明有關,因為我發現這就是為什么應用程序通常只是悄悄關閉的原因。 許多清單聲明是在運行時在cs文件中進行的,因為它們來自我所見和使用的示例。 這是我的代碼。 誰能告訴我我想念的東西嗎? 抱歉,長度不夠,但是我不確定要包含或不包含什么。
這是飛濺活動。
[Activity(Theme = "@style/MyTheme.Splash", MainLauncher = true, NoHistory = true)]
public class SplashActivity : Activity
{
static readonly string TAG = "X:" + typeof(SplashActivity).Name;
public override void OnCreate(Bundle savedInstanceState, PersistableBundle persistentState)
{
base.OnCreate(savedInstanceState, persistentState);
Log.Debug(TAG, "SplashActivity.OnCreate");
}
// Launches the startup task
protected override void OnResume()
{
base.OnResume();
Task startupWork = new Task(() => { SimulateStartup(); });
startupWork.Start();
}
// Simulates background work that happens behind the splash screen
async void SimulateStartup()
{
Log.Debug(TAG, "Performing some startup work that takes a bit of time.");
await Task.Delay(2000); // Simulate a bit of startup work.
Log.Debug(TAG, "Startup work is finished - starting MainActivity.");
StartActivity(new Intent(Application.Context, typeof(MainActivity)));
}
}
這是我的MainActivity。 請注意,清單文件中顯示的權限反映了它所發布的內容,而不是在此處發布的內容,但是在此處發布的時間太長了,再次,此活動一直有效,直到現在必須由另一個活動啟動它為止。 我可以根據要求添加更多內容,但我認為問題出在其他地方
using System;
using System.IO;
using System.Net;
using System.Text;
using Android.Webkit;
using Android.App;
using Android.Content;
using Android.Widget;
using Android.OS;
using Java.Interop;
using Android.Util;
using MyNameSpace.Services;
using Android.Preferences;
using Android.Graphics.Drawables;
namespace MyNameSpace
{
[Activity(Label = "My Agent", Theme = "@android:style/Theme.NoTitleBar", ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.ScreenSize | Android.Content.PM.ConfigChanges.KeyboardHidden)]
public class MainActivity : Activity
{
WebView webview = null;
urlPrefix = "http://example.com/";
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
webview = new WebView(this);
webview.Settings.JavaScriptEnabled = true;
webview.Settings.SetGeolocationEnabled(true);
webview.SetWebViewClient(new MyWebViewClient(this));
webview.SetWebChromeClient(new MyWebChromeClient(this));
SetContentView(webview);
webview.LoadUrl(urlPrefix + "connection.aspx");
//Set Notification bar but make the activity intent pending on user click of notification msg
var intent = new Intent(this, typeof(MainActivity));
intent.AddFlags(ActivityFlags.SingleTop);
var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.UpdateCurrent);
Notification.Builder builder = new Notification.Builder(this)
.SetContentTitle("My Agent Running")
.SetContentText("Show in forground")
.SetSmallIcon(Resource.Drawable.hippo72)
.SetContentIntent(pendingIntent);
// Build the notification:
notification = builder.Build();
// Get the notification manager:
notificationManager = GetSystemService(Context.NotificationService) as NotificationManager;
// Publish the notification:
notificationManager.Notify(notificationId, notification);
public class MyWebViewClient : WebViewClient
{
private readonly Context _context;
public MyWebViewClient(Context context)
{
_context = context;
}
public bool shouldOverrideUrlLoading(WebView view, String url)
{
var uri = Android.Net.Uri.Parse(url);
var intent = new Intent(Intent.ActionView, uri);
_context.StartActivity(intent);
return true;
}
}
public class MyWebChromeClient : WebChromeClient
{
private readonly Context _context;
public MyWebChromeClient(Context context)
{
_context = context;
}
public override void OnGeolocationPermissionsShowPrompt(string origin, GeolocationPermissions.ICallback callback)
{
callback.Invoke(origin, true, false);
}
}
}
我的清單文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mydomain.myagent" android:versionCode="1" android:versionName="1.0">
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" />
<application android:label="My Agent" android:icon="@drawable/hippo72"></application>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.INSTALL_LOCATION_PROVIDER" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.LOCATION_HARDWARE" />
<uses-permission android:name="android.permission.PERSISTENT_ACTIVITY" />
<uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.SEND_SMS" />
在SplashActivity中嘗試此代碼。
用Finish(); 並且沒有任務和異步/等待
[Activity(MainLauncher = true, Theme = "@style/MyTheme.Splash", NoHistory = true)]
public class SplashActivity : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
Intent startup = new Intent(this, typeof(MainActivity));
StartActivity(startup);
Finish();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.