我正在创建一个需要在运行和启动Main Activity之前运行Java类的项目。我的Java类是:Bluetooth.java,register.java,DatabaseHelper.java。我需要运行的程序顺序:蓝牙>注册> MainActivity。 MainActivity是唯一具有布局的Activity。我已经做了什么:
我更改了AndroidManifest 这是代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.windows8.registerlogin">
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".Bluetooth" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".Register"
android:label="@string/app_name"/>
<activity android:name=".MainActivity"
android:label="@string/app_name"/>
</application>
</manifest>
启动程序后,它突然关闭,然后我才能执行任何操作。 你能告诉我程序有什么问题吗?还是我遗漏了一些东西?谢谢。 (看来我无法在此处发布我的logcat)
答案 0 :(得分:0)
在onCreate
的{{1}}中执行以下操作:
Bluetooth
在register.java中使用类似的代码。
这是您确切问题的解决方案。但是,这不是理想的做事方式。
答案 1 :(得分:0)
使用启动器活动是个好主意,但请确保不要通过初始化onCreate
中的内容或将上下文泄漏给匿名AsyncTask来锁定UI线程。
根据您的描述,蓝牙和注册无需进行任何活动。假设这是正确的,并且您可以使它们成为独立的类,那么下面是一个看起来类似的示例:
private AsyncTask<Void, Void, Integer> loader = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.launcher_activity);
loader = new LoadStuff(this);
loader.execute();
}
@Override
public void onDestroy() {
super.onDestroy();
if( loader != null ) {
loader.cancel(true);
loader = null;
}
}
static class LoadStuff extends AsyncTask<Void, Void, Integer> {
WeakReferences<Activity> context;
LoadStuff(Activity context) {
this.context = new WeakReference<>(context);
}
@Override
protected void onPreExecute() {
}
@Override
protected Integer doInBackground(Void... params) {
// assuming they're singletons
Bluetooth.initialize();
Register.initialize();
return 0; // or pass an error code if these fail
}
@Override
protected void onPostExecute(Integer result) {
Activity c = context.get();
if( c != null ) {
Intent intent = new Intent(c, MainActivity.class);
c.startActivity(intent);
c.finish(); // don't let the user come back to this screen
}
}
}
答案 2 :(得分:0)
从应用程序类调用蓝牙类。像这样
public class AppTest extends Application {
@Override
public void onCreate() {
super.onCreate();
//Call your bluetooth class
}
}
并在androidmanifest文件中添加您的应用程序类名称:
<application
android:name=".AppTest">
答案 3 :(得分:-1)
您应该发布收到的错误,但我会为您提供最可能的解决方案。
您的应用可能崩溃,因为类Bluetooth
没有扩展活动,但被标记为活动。
创建一个启动器活动,该活动将具有一个加载屏幕,仅用于向您的用户显示该应用程序正在运行。因为它将是第一个活动,所以它可以调用所需的类,然后才可以启动主要活动。
因此onCreate()方法将如下所示。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.launcher_activity);
new Bluetooth();
new Register();
startActivity(new Intent(this, MainActivity.class));
}