![](/img/trans.png)
[英]how can i launch my app or an activity on notification received when app is in background or killed?
[英]How can i make my app run even when app is killed? killed in the sense when it is removed from recent apps
我正在开发一个可以计算全天解锁次数的应用程序。
我见过很多类似的问题,但没有一个有效。! 任何可以帮助我的人请提供上述问题的代码片段。
甚至确保您提供的解决方案适用于 Android O 及更高版本
主活动.java
public class MainActivity extends AppCompatActivity {
MyReceiver myReceiver;
IntentFilter filter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myReceiver = new MyReceiver();
filter = new IntentFilter(Intent.ACTION_USER_PRESENT);
registerReceiver(myReceiver, filter);
}}
我的接收器.java
public class MyReceiver extends BroadcastReceiver {
private static final String TAG = "BroadCast Receiver";
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_USER_PRESENT)){
Toast.makeText(context, "DEVICE_IS_UNLOCKED",Toast.LENGTH_LONG).show();
Log.i(TAG, "Unlocked");
}
}
}
您需要处理后台服务。
试试下面的代码。
public class BackgroundUpdateService extends Service {
/**
* Author:Hardik Talaviya
* Date: 2019.08.3 2:30 PM
* Describe:
*/
private static final String TAG = "BackgroundLocation";
private Context context;
private boolean stopService = false;
private Handler handler;
private Runnable runnable;
private NotificationCompat.Builder builder = null;
private NotificationManager notificationManager;
@Override
public void onCreate() {
Log.e(TAG, "Background Service onCreate :: ");
super.onCreate();
context = this;
handler = new Handler();
runnable = new Runnable() {
@Override
public void run() {
try {
//Add Here your code if you want start in background
} catch (Exception e) {
e.printStackTrace();
} finally {
handler.postDelayed(this, TimeUnit.SECONDS.toMillis(2));
}
}
};
if (!stopService) {
handler.postDelayed(runnable, TimeUnit.SECONDS.toMillis(2));
}
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onTaskRemoved(Intent rootIntent) {
super.onTaskRemoved(rootIntent);
Log.e(TAG, "onTaskRemoved :: ");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e(TAG, "onStartCommand :: ");
StartForeground();
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Log.e(TAG, "BackgroundService onDestroy :: ");
stopService = true;
if (handler != null) {
handler.removeCallbacks(runnable);
}
}
/*-------- For notification ----------*/
private void StartForeground() {
Intent intent = new Intent(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, PendingIntent.FLAG_ONE_SHOT);
String CHANNEL_ID = "channel_location";
String CHANNEL_NAME = "channel_location";
notificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);
channel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
notificationManager.createNotificationChannel(channel);
builder = new NotificationCompat.Builder(getApplicationContext(), CHANNEL_ID);
builder.setColorized(false);
builder.setChannelId(CHANNEL_ID);
builder.setColor(ContextCompat.getColor(this, R.color.colorPrimaryDark));
builder.setBadgeIconType(NotificationCompat.BADGE_ICON_NONE);
} else {
builder = new NotificationCompat.Builder(getApplicationContext(), CHANNEL_ID);
}
builder.setOnlyAlertOnce(true);
builder.setContentTitle(context.getResources().getString(R.string.app_name));
builder.setContentText("Your Text");
Uri notificationSound = RingtoneManager.getActualDefaultRingtoneUri(this, RingtoneManager.TYPE_NOTIFICATION);
builder.setSound(notificationSound);
builder.setAutoCancel(true);
builder.setSmallIcon(R.mipmap.ic_notification_app_icon);
builder.setContentIntent(pendingIntent);
startForeground(101, builder.build());
}
}
在您的清单中添加这一行
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<service
android:name=".BackgroundUpdateService"
android:enabled="true" />
并使用以下代码从您的活动中启动和停止服务
Intent someIntent = new Intent(MainActivity.this, BackgroundUpdateService.class);
startService(someIntent);//For start service
stopService(someIntent); //For stop service
我希望这可以帮助你!
谢谢你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.