Я делаю, и приложение, связанное с отслеживанием его работы, отлично поставило проблему: оно закрывается после нажатия на него, хотя оно все еще работает в фоновом режиме и предоставляет данные идеально. Я хочу, чтобы оно оставалось в основной активности, потому что я хочу добавить больше функций вприложение Я немного новичок, извините, если моя проблема оказалась простой, и заранее благодарю за помощь
Кто-то спросил, не выходит ли приложение из строя, не падает ли оно, работает ли оно так, как будто оно просто запускаетсяbackground
Как вы можете видеть, здесь нет показанных приложений
Вот как я хочу, чтобы это работало, поэтому даже если кто-то закрывает приложение, отслеживание все равно будет активным, если кто-то не перейдет на вкладки.значок приложения на картинке в панели уведомлений ниже
Теперь, если вы нажмете на это, приложение прекратит отслеживать
Основная активность
public class MainActivity extends AppCompatActivity {
private static final int PERMISSIONS_REQUEST = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE);
if (!lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
finish();
}
int permission = ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION);
if (permission == PackageManager.PERMISSION_GRANTED) {
startTrackerService();
} else {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
PERMISSIONS_REQUEST);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[]
grantResults) {
if (requestCode == PERMISSIONS_REQUEST && grantResults.length == 1
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
startTrackerService();
} else {
Toast.makeText(this, "Please enable location services to allow GPS tracking", Toast.LENGTH_SHORT).show();
}
}
private void startTrackerService() {
startService(new Intent(this, TrackingService.class));
Toast.makeText(this, "GPS tracking enabled", Toast.LENGTH_SHORT).show();
}
}
Служба отслеживания
public class TrackingService extends Service {
private static final String TAG = TrackingService.class.getSimpleName();
public TrackingService() {
}
@Override
public IBinder onBind(Intent intent) {
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public void onCreate() {
super.onCreate();
buildNotification();
loginToFirebase();
}
private void buildNotification() {
String stop = "stop";
registerReceiver(stopReceiver, new IntentFilter(stop));
PendingIntent broadcastIntent = PendingIntent.getBroadcast(
this, 0, new Intent(stop), PendingIntent.FLAG_UPDATE_CURRENT);
Notification.Builder builder = new Notification.Builder(this)
.setContentTitle(getString(R.string.app_name))
.setContentText(getString(R.string.tracking_enabled_notif))
.setOngoing(true)
.setContentIntent(broadcastIntent)
.setSmallIcon(R.drawable.tracking_enabled);
startForeground(1, builder.build());
}
protected BroadcastReceiver stopReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
unregisterReceiver(stopReceiver);
stopSelf();
}
};
private void loginToFirebase() {
String email = getString(R.string.test_email);
String password = getString(R.string.test_password);
FirebaseAuth.getInstance().signInWithEmailAndPassword(
email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(Task<AuthResult> task) {
if (task.isSuccessful()) {
requestLocationUpdates();
} else {
Log.d(TAG, "Firebase authentication failed");
}
}
});
}
private void requestLocationUpdates() {
LocationRequest request = new LocationRequest();
request.setInterval(10000);
request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
FusedLocationProviderClient client = LocationServices.getFusedLocationProviderClient(this);
final String path = getString(R.string.firebase_path);
int permission = ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION);
if (permission == PackageManager.PERMISSION_GRANTED) {
client.requestLocationUpdates(request, new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
DatabaseReference ref = FirebaseDatabase.getInstance().getReference(path);
Location location = locationResult.getLastLocation();
if (location != null) {
ref.setValue(location);
}
}
}, null);
}
}
}
Информация для быстрого тестирования приложения
In Firebase Project on Authentication tab.
Select “Set up sign-in method.”
Choose “Email/password” and then push the slider into the “On” position. Click “Save.”
Select the “Users” tab and then click “Add User.”
Enter the email and password for the test user; I’m opting for test@test.com and testpassword.
Click “Add User.”
** Android Studio, для чего я сделалУведомления icoнс **
Control-click your project’s “res/drawable” folder and then select New > Image Asset.
Open the “Icon Type” dropdown and then select “Notification Icons.”
Click the little button that appears alongside the “Clip Art” label.
Choose the icon you want to use; I’m opting for “My Location.” Click “OK.”
Name this icon “tracking_enabled,” and then click “Next.”
Check the information on the subsequent screen, and then click “Finish.”
**Dependencies**
dependencies {
implementation 'com.google.firebase:firebase-auth:11.8.0'
implementation 'com.google.android.gms:play-services-location:11.8.0'
implementation 'com.google.firebase:firebase-database:11.8.0'
}
Манифест
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
Строка
<string name="tracking_enabled_notif">Tracking is currently enabled. Tap to cancel.</string>
<string name="test_email">test@test.com</string>
<string name="test_password">testpassword</string>
<string name="firebase_path">location</string>
Хорошо, я думаю, что сделал НазваниеРезюме и предоставленный минимальный код тестирования, если я все еще что-то пропустил Извините за это, я надеюсь, что вы, ребята, можете помочь мне, я буду очень благодарен заранее спасибо xD