Skip to content

Commit b33112d

Browse files
authored
Merge pull request #1 from lliioollcn/main
GMC作为前台服务运行,防止被杀死
2 parents 971f3ff + 09b5598 commit b33112d

File tree

15 files changed

+14910
-234
lines changed

15 files changed

+14910
-234
lines changed

app/build.gradle

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ plugins {
55

66
android {
77
compileSdk 30
8-
98
defaultConfig {
109
applicationId "net.lz1998.gomiraiclient"
1110
minSdk 24
@@ -46,6 +45,9 @@ dependencies {
4645
implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
4746
implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
4847
implementation fileTree(dir: "libs", include: ["*.jar", "*.aar"])
48+
implementation 'com.google.protobuf:protobuf-java:3.19.1'
49+
implementation 'com.squareup.okhttp3:okhttp:4.9.3'
50+
implementation 'com.squareup.okio:okio:3.0.0'
4951
testImplementation 'junit:junit:4.+'
5052
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
5153
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

app/src/main/AndroidManifest.xml

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,34 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3-
package="net.lz1998.gomiraiclient">
3+
package="net.lz1998.gomiraiclient">
44
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
55
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
66
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
7+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
78
<uses-permission android:name="android.permission.INTERNET"/>
8-
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
9-
10-
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
119

1210

1311
<application
14-
android:extractNativeLibs="true"
15-
android:usesCleartextTraffic="true"
16-
android:allowBackup="true"
17-
android:icon="@mipmap/ic_launcher"
18-
android:label="@string/app_name"
19-
android:roundIcon="@mipmap/ic_launcher_round"
20-
android:supportsRtl="true"
21-
android:theme="@style/Theme.GoMiraiClient">
22-
<activity
23-
android:name=".MainActivity"
24-
android:exported="true"
12+
android:extractNativeLibs="true"
13+
android:usesCleartextTraffic="true"
14+
android:allowBackup="true"
15+
android:icon="@mipmap/ic_launcher"
2516
android:label="@string/app_name"
26-
android:theme="@style/Theme.GoMiraiClient.NoActionBar">
17+
android:roundIcon="@mipmap/ic_launcher_round"
18+
android:supportsRtl="true"
19+
android:theme="@style/Theme.GoMiraiClient">
20+
<activity
21+
android:name=".MainActivity"
22+
android:exported="true"
23+
android:label="@string/app_name"
24+
android:theme="@style/Theme.GoMiraiClient.NoActionBar">
2725
<intent-filter>
28-
<action android:name="android.intent.action.MAIN" />
26+
<action android:name="android.intent.action.MAIN"/>
2927

30-
<category android:name="android.intent.category.LAUNCHER" />
28+
<category android:name="android.intent.category.LAUNCHER"/>
3129
</intent-filter>
3230
</activity>
31+
<service android:name="cn.lliiooll.gmc.BotService"/>
3332
</application>
3433

3534
</manifest>
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package cn.lliiooll.gmc;
2+
3+
import android.app.Service;
4+
import android.content.ComponentName;
5+
import android.content.Intent;
6+
import android.content.ServiceConnection;
7+
import android.os.Build;
8+
import android.os.IBinder;
9+
import android.widget.Toast;
10+
import androidx.annotation.Nullable;
11+
import cn.lliiooll.gmc.util.NotificationUtil;
12+
import gmc.Gmc;
13+
import net.lz1998.gomiraiclient.MainActivity;
14+
import org.jetbrains.annotations.NotNull;
15+
16+
public class BotService extends Service {
17+
private static boolean active = false;
18+
19+
@Override
20+
public void onCreate() {
21+
22+
new Thread(Gmc::start).start();
23+
Toast.makeText(this, "Start Service", Toast.LENGTH_SHORT).show();
24+
active = true;
25+
startForeground(1, NotificationUtil.create(this));
26+
super.onCreate();
27+
}
28+
29+
@Nullable
30+
@Override
31+
public IBinder onBind(Intent intent) {
32+
return null;
33+
}
34+
35+
@Override
36+
public int onStartCommand(Intent intent, int flags, int startId) {
37+
return super.onStartCommand(intent, flags, startId);
38+
}
39+
40+
@Override
41+
public void onDestroy() {
42+
active = false;
43+
stopForeground(true);
44+
super.onDestroy();
45+
}
46+
47+
@NotNull
48+
public static boolean isActive() {
49+
return BotService.active;
50+
}
51+
52+
public static void start(@NotNull MainActivity activity) {
53+
Intent intent = new Intent(activity, BotService.class);
54+
activity.bindService(intent, new ServiceConnection() {
55+
@Override
56+
public void onServiceConnected(ComponentName name, IBinder service) {
57+
58+
}
59+
60+
@Override
61+
public void onServiceDisconnected(ComponentName name) {
62+
63+
}
64+
}, BIND_AUTO_CREATE);
65+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
66+
activity.startForegroundService(intent);
67+
} else {
68+
activity.startService(intent);
69+
}
70+
}
71+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package cn.lliiooll.gmc.util;
2+
3+
import android.app.Notification;
4+
import android.app.NotificationChannel;
5+
import android.app.NotificationManager;
6+
import android.app.PendingIntent;
7+
import android.content.Context;
8+
import android.content.Intent;
9+
import android.graphics.Color;
10+
import android.os.Build;
11+
import androidx.core.app.NotificationCompat;
12+
import androidx.core.app.NotificationManagerCompat;
13+
import cn.lliiooll.gmc.BotService;
14+
import net.lz1998.gomiraiclient.MainActivity;
15+
import net.lz1998.gomiraiclient.R;
16+
17+
public class NotificationUtil {
18+
public static Notification create(BotService service) {
19+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
20+
CharSequence name = "GMC";
21+
String description = "GMC";
22+
int importance = NotificationManager.IMPORTANCE_DEFAULT;
23+
NotificationChannel channel = new NotificationChannel("gmc_channel", name, importance);
24+
channel.setDescription(description);
25+
// Register the channel with the system; you can't change the importance
26+
// or other notification behaviors after this
27+
NotificationManager notificationManager = service.getSystemService(NotificationManager.class);
28+
notificationManager.createNotificationChannel(channel);
29+
}
30+
Intent intent = new Intent(service, BotService.class);
31+
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
32+
PendingIntent pendingIntent = PendingIntent.getActivity(service, 0, intent, 0);
33+
34+
NotificationCompat.Builder builder = new NotificationCompat.Builder(service, "gmc_channel")
35+
.setSmallIcon(R.drawable.ic_launcher_background)
36+
.setContentTitle("GMC")
37+
.setContentText("Start")
38+
.setContentIntent(pendingIntent)
39+
.setPriority(NotificationCompat.PRIORITY_DEFAULT);
40+
41+
//创建通知并返回
42+
43+
44+
return builder.build();
45+
}
46+
47+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package cn.lliiooll.gmc.util;
2+
3+
import android.Manifest;
4+
import android.app.Activity;
5+
import android.content.pm.PackageManager;
6+
import android.os.Build;
7+
import androidx.core.app.ActivityCompat;
8+
import androidx.core.content.ContextCompat;
9+
import net.lz1998.gomiraiclient.MainActivity;
10+
import org.jetbrains.annotations.NotNull;
11+
12+
public class PermissionUtil {
13+
private static final String[] permissions = new String[]{
14+
Manifest.permission.MANAGE_EXTERNAL_STORAGE,
15+
Manifest.permission.READ_EXTERNAL_STORAGE,
16+
Manifest.permission.WRITE_EXTERNAL_STORAGE,
17+
Manifest.permission.FOREGROUND_SERVICE,
18+
Manifest.permission.INTERNET,
19+
};
20+
private static final int requestCode = 0x9081;
21+
22+
@NotNull
23+
public static boolean checkAll(Activity activity) {
24+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
25+
return true;
26+
}
27+
for (String permission : permissions) {
28+
if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED ||
29+
ActivityCompat.shouldShowRequestPermissionRationale(activity, permission)) {
30+
return false;
31+
}
32+
}
33+
return true;
34+
}
35+
36+
public static void request(Activity activity) {
37+
ActivityCompat.requestPermissions(activity, permissions, requestCode);
38+
}
39+
40+
public static boolean isSelfRequest(int requestCode) {
41+
return requestCode == PermissionUtil.requestCode;
42+
}
43+
}

0 commit comments

Comments
 (0)