gpt4 book ai didi

android - 我的华为杀死了我的 wakelock android 应用程序

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:14:52 25 4
gpt4 key购买 nike

我尝试为使用手机加速度计的 Android 开发应用程序。除了华为手机(在 P9 上测试)外,它在任何地方都可以使用。我选中了选项“继续黑屏运行”并使用电池保护程序(电池选项)保护应用程序。

我看不到解决方案,所以我问你:-)这是我的 Activity :

public class MainActivity extends AppCompatActivity {

private static final String TAG = "MainActivity";
private MyService mService;
private boolean mIsRunning;
private MyService.ICallback mCallback = new MyService.ICallback() {
public void changed() {
Log.i(TAG, "CHANGED");
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}

@Override
protected void onResume() {
super.onResume();
if(!mIsRunning) {
startStepService();
}
bindStepService();
}

@Override
protected void onPause() {
super.onPause();
if(mIsRunning && mService != null) {
unbindStepService();
}
}

private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
mService = ((MyService.StepBinder)service).getService();
mService.registerCallback(mCallback);
}

public void onServiceDisconnected(ComponentName className) {
mService = null;
}
};

private void startStepService() {
if (! mIsRunning) {
mIsRunning = true;
startService(new Intent(MainActivity.this, MyService.class));
}
}

private void bindStepService() {
bindService(new Intent(MainActivity.this, MyService.class), mConnection, Context.BIND_AUTO_CREATE);
}

private void unbindStepService() {
unbindService(mConnection);
}

还有我的服务:

public class MyService extends Service {
private static final String TAG = "Test";
private SensorManager mSensorManager;
private Detector detector;
private MyDisplayer displayer;
private PowerManager.WakeLock wakeLock;
private ICallback mCallback;
private MyDisplayer.Listener mStepListener = new MyDisplayer.Listener() {
public void changed() {
passValue();
}

public void passValue() {
if (mCallback != null) {
mCallback.changed();
}
}
};
private final IBinder mBinder = new StepBinder();
public static final int MyID = 1234;
android.app.Notification Notification;

public class StepBinder extends Binder {
public MyService getService() {
return MyService.this;
}
}

@Override
public void onCreate() {
super.onCreate();
acquireWakeLock();
displayer = new MyDisplayer();
displayer.addListener(mStepListener);
registerDetector();
startServiceNotification();
}

private void registerDetector() {
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
detector = new Detector();
detector.addStepListener(displayer);
Sensor mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener(detector, mSensor, SensorManager.SENSOR_DELAY_GAME);
}

@Override
public IBinder onBind(Intent intent) {
return mBinder;
}


public interface ICallback {
void changed();
}



public void registerCallback(ICallback cb) {
mCallback = cb;
}

private void startServiceNotification() {
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.logo_32)
.setContentTitle("Test")
.setPriority(Notification.PRIORITY_HIGH)
.setContentText("My Notif");
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
Intent resultIntent = new Intent(this, MainActivity.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(resultPendingIntent);
startForeground(MyID, mBuilder.build());
}

private void acquireWakeLock() {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
int wakeFlags = PowerManager.PARTIAL_WAKE_LOCK;
wakeLock = pm.newWakeLock(wakeFlags, TAG);
wakeLock.acquire();
}


@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}

Listener 和 Detector 对于这个问题没有用,所以我没有把它们放在这里。谢谢你的帮助。

最佳答案

您是否尝试过将您的应用列入 protected 应用?参见 "Protected Apps" setting on Huawei phones, and how to handle it .华为有一项特殊功能,允许用户选择哪些应用程序可以在后台运行。您可以要求用户接受您的应用程序在后台运行。显然,您只能向他们展示适当的设置页面并要求他们自己启用此功能。另外我知道您无法通过编程方式知道用户是否这样做了。

关于android - 我的华为杀死了我的 wakelock android 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40153842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com