Я обновил API-интерфейс распознавания активности, который отлично работает в моем приложении, до API-интерфейса Transition, который, к сожалению, не работает.
Причина, по которой я обновляюсь, заключается в том, чтобы обновить мой код в соответствии с новыми требованиями, установленными Android, в отношении ограничений фоновых процессов, ограничений приемника вещания и приложений, которые должны быть ориентированы на SDK 28 к ноябрю 2018 года.
Проблема, с которой я сталкиваюсь, заключается в том, что широковещательный приемник, хотя он явный (поэтому он не должен зависеть от новых ограничений на приемники для Android), не запускается.Я следовал инструкциям о том, как правильно использовать API переходов, и обновил мой код в разных областях, то есть перешел со старых сервисов на теперь использующий новый JobIntentservice, который, кажется, работает, в других частях моего приложения.кажется, все работает до момента, когда ему нужно отправить трансляцию, независимо от того, делает это или нет, я не знаю, но я знаю, что мой приемник ничего не получает.
Если кто-то сможет указатьгде проблема может быть, я был бы очень признателен.Чтобы понять, что я делаю.Я создал приложение, которое может определить, когда вы находитесь за рулем, и как только это произойдет, оно автоматически отключит ваш телефон, поэтому вы не будете отвлекаться на него, и оно отправит смс с автоответчиком всем, кто вам звонит или отправляет текстовые сообщения.вождения.
Я разместил часть своего кода ниже:
В действии настроек, где пользователь может включить APi перехода активности, который после активации должен отправить намерение широковещательной передачи классу ActivityTransitionReceiver.
SettingsActivity.Java (AppCompatPreferenceActivity)
@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
Log.i(TAG, "onSharedPreferenceChanged() ");
prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
final PackageManager packageManager = getApplicationContext().getPackageManager();
final ComponentName ActivityTransitionComponent = new ComponentName(getApplicationContext(), ActivityTransitionReceiver.class);
ActivityTransitions activityTransitions = new ActivityTransitions();
Intent startAcrIntent = new Intent (getApplicationContext(), ActivityTransitionReceiver.class);
startAcrIntent.setAction("westport.andrewirwin.com.drivesafe.ACR");
PendingIntent acrPendingIntent = PendingIntent.getBroadcast(
getApplicationContext(),
0,
startAcrIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
if (key.equals("autoStart_switch")) {
Log.i(TAG, key + " changed");
if (prefs.getBoolean("autoStart_switch", false)) {
Log.i(TAG, "autoStart_switch: true");
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = preferences.edit();
//myPendingIntent is the instance of PendingIntent where the app receives callbacks.
// Start Activity Transistion Recognition
packageManager.setComponentEnabledSetting(ActivityTransitionComponent, PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
Task<Void> task =
ActivityRecognition.getClient(
getApplicationContext()).requestActivityTransitionUpdates(
activityTransitions.getActivityTransitionsRequest(),
acrPendingIntent);
task.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void result) {
Log.i(TAG, "ACR RUNNING SUCCESS!!");
// packageManager.setComponentEnabledSetting(ActivityTransitionComponent, PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
// PackageManager.DONT_KILL_APP);
Log.i(TAG, "ActivityTransitionReceiver Enabled");
}
});
task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.i(TAG, "ACR FAILED TO START ");
packageManager.setComponentEnabledSetting(ActivityTransitionComponent, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
});
//}
} else {
Log.i(TAG, "autoStart_switch: false");
if (prefs.getBoolean("bluetoothAuto_switch", false)) {
return;
}
// Stop Activity Transition Recognition
packageManager.setComponentEnabledSetting(ActivityTransitionComponent, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
Task<Void> task =
ActivityRecognition.getClient(
getApplicationContext()).removeActivityTransitionUpdates(acrPendingIntent);
task.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void result) {
Log.i(TAG, "ACR STOPPED ");
// packageManager.setComponentEnabledSetting(ActivityTransitionComponent, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
// PackageManager.DONT_KILL_APP);
Log.i(TAG, "ActivityTransitionReceiver: Disabled");
}
});
task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.i(TAG, "ACR FAILED TO STOP ");
}
});
}
}
}
AndroidManifest.xml
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />
<uses-permission android:name="android.permission.WRITE_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<receiver android:name=".ActivityTransitionReceiver"
android:enabled="false"
android:exported="true">
<intent-filter>
<action android:name="westport.andrewirwin.com.drivesafe.ACR"/>
</intent-filter>
</receiver>
ActivityTransitionReceiver
public class ActivityTransitionReceiver extends BroadcastReceiver {
private String TAG = "ActivityTransitionReceiver";
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "onReceive: ");
}
Заранее благодарю за любую помощь