优化重启的机制

streaming
Matthew 4 months ago
parent ac43db4e4a
commit c186ab9098

@ -202,7 +202,6 @@
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
android:exported="true" android:exported="true"
android:launchMode="singleTop"
android:screenOrientation="landscape"> android:screenOrientation="landscape">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />

@ -7,16 +7,11 @@ import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.location.Location; import android.location.Location;
import android.location.LocationListener; import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Build; import android.os.Build;
import android.os.FileObserver;
import android.os.Handler; import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.Messenger; import android.os.Messenger;
import android.os.StrictMode; import android.os.StrictMode;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.core.app.ActivityCompat; import androidx.core.app.ActivityCompat;
@ -24,9 +19,7 @@ import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle; import android.os.Bundle;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils; import android.text.TextUtils;
import android.text.method.ScrollingMovementMethod;
import android.util.Log; import android.util.Log;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.View; import android.view.View;
@ -38,8 +31,6 @@ import com.xypower.common.CameraUtils;
import com.xypower.common.MicroPhotoContext; import com.xypower.common.MicroPhotoContext;
import com.xypower.mpapp.databinding.ActivityMainBinding; import com.xypower.mpapp.databinding.ActivityMainBinding;
import com.xypower.mpapp.utils.LocationUtil; import com.xypower.mpapp.utils.LocationUtil;
import com.xypower.mpapp.utils.RandomReader;
import java.io.File; import java.io.File;
import java.lang.reflect.Method; import java.lang.reflect.Method;
@ -366,8 +357,18 @@ public class MainActivity extends AppCompatActivity {
binding.btnRestartApp.setOnClickListener(new View.OnClickListener() { binding.btnRestartApp.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
Context context = v.getContext().getApplicationContext(); Context context = MainActivity.this;
MicroPhotoService.restartApp(context, context.getPackageName(), "Manual Restart From MainActivity");
Intent intent = new Intent(context, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
int noDelay = 1;
intent.putExtra("noDelay", noDelay);
intent.putExtra("reason", "Manual Restart From MainActivity");
context.startActivity(intent);
finish();
} }
}); });

@ -50,7 +50,6 @@ import androidx.core.app.NotificationCompat;
import androidx.core.content.FileProvider; import androidx.core.content.FileProvider;
import androidx.localbroadcastmanager.content.LocalBroadcastManager; import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import android.provider.MediaStore;
import android.telephony.SignalStrength; import android.telephony.SignalStrength;
import android.telephony.SubscriptionManager; import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
@ -60,7 +59,6 @@ import android.util.Log;
import android.widget.RemoteViews; import android.widget.RemoteViews;
import android.widget.Toast; import android.widget.Toast;
import com.dev.api.XyDev;
import com.dev.devapi.api.SysApi; import com.dev.devapi.api.SysApi;
import com.xypower.common.FileDownloader; import com.xypower.common.FileDownloader;
import com.xypower.common.FilesUtils; import com.xypower.common.FilesUtils;
@ -76,12 +74,10 @@ import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.InputStream; import java.io.InputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import java.io.Reader; import java.io.Reader;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.net.Inet4Address; import java.net.Inet4Address;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.URI;
import java.nio.channels.FileLock; import java.nio.channels.FileLock;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
@ -452,6 +448,27 @@ public class MicroPhotoService extends Service {
mService = service; mService = service;
} }
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
try {
ProcessReceivedAction(context, intent);
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void restartSelf(Context context, String reason) {
Intent intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
int noDelay = 1;
intent.putExtra("noDelay", noDelay);
if (!TextUtils.isEmpty(reason)) {
intent.putExtra("reason", reason);
}
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
System.exit(0);
}
private void ProcessReceivedAction(Context context, Intent intent) {
String action = intent.getAction(); String action = intent.getAction();
if (TextUtils.equals(ACTION_HEARTBEAT, action)) { if (TextUtils.equals(ACTION_HEARTBEAT, action)) {
long ts = System.currentTimeMillis(); long ts = System.currentTimeMillis();
@ -526,19 +543,11 @@ public class MicroPhotoService extends Service {
Log.i(TAG, "Take Photo CH=" + channel + " PR=" + preset + " Mannually"); Log.i(TAG, "Take Photo CH=" + channel + " PR=" + preset + " Mannually");
mService.notifyToTakePhoto(mService.mNativeHandle, channel, preset, 0, photoOrVideo); mService.notifyToTakePhoto(mService.mNativeHandle, channel, preset, 0, photoOrVideo);
} else if (TextUtils.equals(ACTION_MSG_BROADCAST, action)) {
int what = intent.getIntExtra("what", 0);
int data = intent.getIntExtra("data", 0);
if (what == MSG_WHAT_SENDING_HB) {
mService.sendHeartbeat(mService.mNativeHandle, mService.getSignalLevel());
}
} else if (TextUtils.equals(ACTION_UPDATE_CONFIGS, action)) { } else if (TextUtils.equals(ACTION_UPDATE_CONFIGS, action)) {
int restart = intent.getIntExtra("restart", 0); int restart = intent.getIntExtra("restart", 0);
Log.i(TAG, "UPD CFG Fired ACTION=" + action + " restart=" + restart); Log.i(TAG, "UPD CFG Fired ACTION=" + action + " restart=" + restart);
if (restart != 0) { if (restart != 0) {
MicroPhotoService.restartApp(context, context.getPackageName(), "Config Updated"); restartSelf(context, "Cfg Updated");
} else if (mService.mNativeHandle != 0) { } else if (mService.mNativeHandle != 0) {
mService.reloadConfigs(mService.mNativeHandle); mService.reloadConfigs(mService.mNativeHandle);
} }
@ -652,7 +661,6 @@ public class MicroPhotoService extends Service {
Log.i(TAG, "After disable GPS"); Log.i(TAG, "After disable GPS");
mService.mPreviousGpsTimer = null; mService.mPreviousGpsTimer = null;
} else if (TextUtils.equals(ACTION_RESTART, action)) { } else if (TextUtils.equals(ACTION_RESTART, action)) {
String reason = intent.getStringExtra("reason"); String reason = intent.getStringExtra("reason");
MicroPhotoService.infoLog("Recv RESTART APP cmd, reason=" + (TextUtils.isEmpty(reason) ? "" : reason)); MicroPhotoService.infoLog("Recv RESTART APP cmd, reason=" + (TextUtils.isEmpty(reason) ? "" : reason));
try { try {
@ -660,7 +668,7 @@ public class MicroPhotoService extends Service {
} catch (Exception ex) { } catch (Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
} }
MicroPhotoService.restartApp(context.getApplicationContext(), MicroPhotoContext.PACKAGE_NAME_MPAPP, "Restart Cmd"); restartSelf(context, reason);
} }
} }
} }
@ -1483,7 +1491,7 @@ public class MicroPhotoService extends Service {
public void run() { public void run() {
if (rebootType == 0) { if (rebootType == 0) {
Context context = MicroPhotoService.this.getApplicationContext(); Context context = MicroPhotoService.this.getApplicationContext();
restartApp(context, context.getPackageName(), reason); restartSelf(context, reason);
} else { } else {
Log.w(TAG, "Recv REBOOT command"); Log.w(TAG, "Recv REBOOT command");
@ -1494,52 +1502,15 @@ public class MicroPhotoService extends Service {
mHander.postDelayed(runnable, timeout > 0 ? timeout : 1000); mHander.postDelayed(runnable, timeout > 0 ? timeout : 1000);
} }
public static void restartApp(Context context, String packageName, String reason) { public static void restartSelf(Context context, String reason) {
// "com.xypower.mpmaster.ACT_REQ_RST_APP"
Intent intent = new Intent(); Intent intent = new Intent();
intent.setAction("com.xypower.mpmaster.ACT_REQ_RST_APP"); intent.setAction(ACTION_RESTART);
intent.setPackage(MicroPhotoContext.PACKAGE_NAME_MPMASTER); intent.setPackage(context.getPackageName());
intent.putExtra("noDelay", 1); intent.putExtra("noDelay", 1);
intent.putExtra("reason", reason); intent.putExtra("reason", reason);
intent.putExtra("packageName", context.getPackageName()); intent.putExtra("packageName", context.getPackageName());
context.sendBroadcast(intent); context.sendBroadcast(intent);
System.exit(0);
/*
if (TextUtils.equals(packageName, MicroPhotoContext.PACKAGE_NAME_MPAPP)) {
MicroPhotoContext.restartMpApp(context, reason, 0);
System.exit(0);
} else {
MicroPhotoContext.restartApp(context, packageName, reason);
}
*/
/*
Intent intent = new Intent(context, MainActivity.class);
int noDelay = 1;
intent.putExtra("noDelay", noDelay);
if (!TextUtils.isEmpty(reason)) {
intent.putExtra("reason", reason);
}
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
System.exit(0);
*/
/*
Intent intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
int noDelay = 1;
intent.putExtra("noDelay", noDelay);
PendingIntent restartIntent = PendingIntent.getActivity(context, 0, intent, 0);
AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
mgr.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 500, restartIntent);
System.exit(0);
*/
} }
public void enableGps(boolean enabled) { public void enableGps(boolean enabled) {

Loading…
Cancel
Save