Uygulama kapansada, servisi uyanık tutmak
Merhaba,
Aracımda RK3066 işlemcili bir android multimedia cihazı var. Direksyon tuşlarım kendi uygulamaları için sağlıklı çalışıyor fakat spotify,turkcell muzik yada ttnet müzikte çalışmıyor.Bu nedenle benimde aklıma tuşları yakalayıp Media_Next tuşunu taklit etmek geldi ki başarılı oldum. Fakat şöyle bir sorunum var; oluşturduğum servis ve broadcast receiver uygulama ekrandayken sağlıklı çalışıyor fakat faklı bir uygulamaya geçtiğimde yada launcher ekranına geldiğimde çalışmıyor.
Yaptığım işlemler: "ACTION_BOOT_COMPLETED" ile açılışta servisimi, servisimlede tuşları yakalayacağım BroadcastReceiver register ediyorum. Ardından gelen tuşun değerine göre benim istediğim tuşu taklit ediyorum. Kodlarımda aşağıdak gibidir. Bu servisi uygulama kapalı olsa bile ayakta tutmak istiyorum. Önerilerinizi bekliyorum
WscReceiver
package com.ford.swc;
import android.app.Instrumentation;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class WscReceiver extends BroadcastReceiver {
public WscReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Settings.MTCBroadcastIrkeyUp)) {
int keyCode = intent.getIntExtra("keyCode", 0);
Toast.makeText(context, Integer.toString(keyCode), Toast.LENGTH_SHORT);
if (Settings.MTCKeysPrev.contains(keyCode)) {
Toast.makeText(context, "<<", Toast.LENGTH_SHORT);
new Thread(new Runnable() {
@Override
public void run() {
try {
Instrumentation inst = new Instrumentation();
inst.sendKeyDownUpSync(88);
} catch (Exception e) {
}
}
}).start();
}
if (Settings.MTCKeysNext.contains(keyCode)) {
Toast.makeText(context, ">>", Toast.LENGTH_SHORT);
new Thread(new Runnable() {
@Override
public void run() {
try {
Instrumentation inst = new Instrumentation();
inst.sendKeyDownUpSync(87);
} catch (Exception e) {
}
}
}).start();
}
}
}
}
AndroidServiceStartOnBoot
package com.ford.swc;
import android.app.Service;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.support.v7.app.AlertDialog;
import android.util.Log;
public class AndroidServiceStartOnBoot extends Service {
public AndroidServiceStartOnBoot() {
}
WscReceiver wsr;
@Override
public void onCreate() {
super.onCreate();
// here you can add whatever you want this service to do
Log.d("LOG", "AndroidServiceStartOnBoot");
IntentFilter intf = new IntentFilter();
intf.addAction(Settings.MTCBroadcastIrkeyUp);
wsr = new WscReceiver();
registerReceiver(wsr, intf);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
BroadcastReceiverOnBootComplete
package com.ford.swc;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.widget.Toast;
public class BroadcastReceiverOnBootComplete extends BroadcastReceiver {
public BroadcastReceiverOnBootComplete() {
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equalsIgnoreCase(Intent.ACTION_BOOT_COMPLETED)) {
Toast.makeText(context, "BroadcastReceiverOnBootComplete Başladı", Toast.LENGTH_SHORT).show();
Intent serviceIntent = new Intent(context, AndroidServiceStartOnBoot.class);
context.startService(serviceIntent);
}
}
}