Как проверить тип действия, получаемого от широковещательного приемника в Android?

58
8

В настоящее время я работаю над приемниками Broadcast в android, и я не знаю, как проверить тип действия, вызываемого в широковещательном приемнике Broad Cast. Ниже приведен файл манифеста и файл java:

Андроид манифест:

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:typeface="serif">
<receiver android:name=".Main2Activity">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
</intent-filter>
</receiver>
</application>

Файл Java:

package com.example.ashis.assignment1;

public class Main2Activity extends BroadcastReceiver {

/*
* @Override protected void onCreate(Bundle savedInstanceState) {
* super.onCreate(savedInstanceState);
* setContentView(R.layout.activity_main2); }
*/

@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Wallpaper has been changed......", Toast.LENGTH_LONG).show();
}
}

Можно ли проверить тип действия, описанного в файле манифеста в файле Main2Activity.java?

спросил(а) 2020-04-04T00:04:04+03:00 5 месяцев, 4 недели назад
1
Решение
57

Поскольку ниже код является получателем, который вы добавляете в манифест

<receiver android:name=".Main2Activity">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
</intent-filter>
</receiver>

Вы можете использовать intent.getAction() чтобы проверить, какое действие произошло, например:

public class Main2Activity extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
String message = "";
switch (intent.getAction()) {
case Intent.ACTION_POWER_CONNECTED:
message = "Power Connected";
break;
case Intent.ACTION_POWER_DISCONNECTED:
message = "Power Disconnected";
break;

}
Toast.makeText(context.getApplicationContext(), message, Toast.LENGTH_SHORT).show();
}
}

ответил(а) 2020-04-04T00:18:14.321001+03:00 5 месяцев, 4 недели назад
41

Проще всего это:

String action = intent.getAction();

ответил(а) 2020-04-04T00:04:04+03:00 5 месяцев, 4 недели назад
41

В методе onReceive()


@Override
public void onReceive(Context context, Intent intent) {
String action=intent.getAction();
if(action.equals("android.intent.action.ACTION_POWER_CONNECTED")){

Toast.makeText(context,"action",Toast.LENGTH_LONG).show();
}
}

ответил(а) 2020-04-04T00:04:04+03:00 5 месяцев, 4 недели назад
-4

Попробуй это

<receiver android:name=".PowerStatusReceiver ">
<intent-filter>
<action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
</intent-filter>
</receiver>

Затем зарегистрируйте приемники. Как это в onCreate of activity

// register our power status receivers

IntentFilter powerConnectedFilter = new IntentFilter(Intent.ACTION_POWER_CONNECTED);
registerReceiver(PowerStatusReceiver , powerConnectedFilter);

IntentFilter powerDisconnectedFilter = new IntentFilter(Intent.ACTION_POWER_DISCONNECTED);
registerReceiver(PowerStatusReceiver , powerDisconnectedFilter);

Определите наш BroadcastReceiver и вставьте в него запрос BATTERY_STATUS

BroadcastReceiver PowerStatusReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
Intent batteryStatus = context.registerReceiver(null, ifilter);

// Are we charging / charged?
int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
status == BatteryManager.BATTERY_STATUS_FULL;
}
};

ответил(а) 2020-04-04T00:04:04+03:00 5 месяцев, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема