У меня есть служба, из которой я пытаюсь показать диалоговое окно предупреждения. Это кажется невозможным, поэтому я решил показать его в прозрачной деятельности моего приложения. Тем не менее, я получаю эту ошибку:Отображение диалогового окна предупреждения в полупрозрачной активности
02-01 10:29:18.336 3806-3806/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.application.sweetiean.dummylocationupdates, PID: 3806
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.application.sweetiean.dummylocationupdates/com.application.sweetiean.dummylocationupdates.MainActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
at android.support.v7.app.AppCompatDelegateImplV9.createSubDecor(AppCompatDelegateImplV9.java:355)
at android.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:324)
at android.support.v7.app.AppCompatDelegateImplV9.onPostCreate(AppCompatDelegateImplV9.java:172)
at android.support.v7.app.AppCompatActivity.onPostCreate(AppCompatActivity.java:101)
at android.app.Instrumentation.callActivityOnPostCreate(Instrumentation.java:1186)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2280)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
at android.app.ActivityThread.access$800(ActivityThread.java:144)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
Вот мой основной класс деятельности:
package com.application.sweetiean.dummylocationupdates;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.LocationManager;
import android.provider.Settings;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.view.ContextThemeWrapper;
import android.view.WindowManager;
import android.widget.Toast;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationServices;
import static com.application.sweetiean.dummylocationupdates.R.style.dialog;
public class MainActivity extends AppCompatActivity {
LocationManager locationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_main);
Toast.makeText(this, "Background Services starting...", Toast.LENGTH_SHORT).show();
// use this to start and trigger a service
Intent i= new Intent(this, LocationUpdateService.class);
/*this.startService(i);
finish();*/
// potentially add data to the intent
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
boolean enabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
// check if enabled and if not send user to the GSP settings
if (!enabled) {
showSettingsAlert();
} else {
this.startService(i);
finish();
}
//finish();
}
public void showSettingsAlert() {
//AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(getApplication(), dialog));
builder.setTitle("GPS Settings");
builder.setMessage("GPS is not enabled. Do you want to enable it?");
//AlertDialog alert = builder.create();
builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
}
});
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
//stopSelf();
}
});
AlertDialog alert = builder.create();
alert.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
alert.show();
}
}
Я использую слитое местоположение поставщик API в моей службе, и я хочу, чтобы обеспечить что пользователь включит свой GPS до запуска службы. у меня есть это в моем манифесте уже: <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
НЕ ПОЛНОСТЬЮ связанный с этим вопрос, но это будет приподнятое, чтобы получить ответ Какова политика Google PlayStore на приложения, которые работают службы геолокации весь день? Так как я использую FusedLocationProvider API будет ли playstore отклонить мое приложение, потому что требует GPS, чтобы быть запущен весь день, будь то на переднем плане или на заднем плане или даже если приложение будет убит
Почему вы предлагаете использовать LocationManager, каково преимущество перед FusedLocation. Раньше я использовал диспетчер местоположений и переключился на google play services api. Кроме того, можно ли использовать тему appcompat с полупрозрачной активностью? Я только начал получать эту ошибку, когда я решил ввести alertdialog. –