虽然我知道已经有一些答案,但我不太了解它们,因为我只是Android编程的初学者.我尝试使用以下代码实例化我的接收器:
<receiver
android:name="com.example.android.exampleapp.MainActivity$NetworkChangeReceiver"
android:enabled="true"
android:label="NetworkChangeReceiver">
<intent-filter>
<action android:name="android.net.wifi.STATE_CHANGE" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
但它不起作用.logcat说:
java.lang.RuntimeException:
Unable to instantiate receiver com.example.android.exampleapp.MainActivity$NetworkChangeReceiver:
java.lang.InstantiationException:
class com.example.android.exampleapp.MainActivity$NetworkChangeReceiver has no zero argument constructor
Run Code Online (Sandbox Code Playgroud)
我在MainActivity.java中的部分代码如下所示:
public class NetworkChangeReceiver extends BroadcastReceiver {
/* All my code that reacts when WiFi state changes are here */
}
Run Code Online (Sandbox Code Playgroud)
我知道这个问题听起来很容易,但我真的不知道如何解决这个错误.我读过这个(我认为它有点无效 - 我没有空的构造函数)和一堆其他在线教程,但我仍然无法得到它.任何帮助,将不胜感激 :)
我无法弄清楚下面的代码有什么问题.我还检查了两次注册接收器.但事实并非如此.或者可能是我遗失了一些东西.可以请任何帮助.我真的需要它.:(
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.IBinder;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.widget.Toast;
/**
*
* @author Bharat
*
*/
public class CallNotifierService extends Service
{
private static final String ACTION_IN = "android.intent.action.PHONE_STATE";
private static final String ACTION_OUT = "android.intent.action.NEW_OUTGOING_CALL";
private CallBr br_call;
@Override
public IBinder onBind(Intent arg0)
{
return null;
}
@Override
public void onDestroy()
{
Log.d("service", "destroy");
this.unregisterReceiver(this.br_call);
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{ …Run Code Online (Sandbox Code Playgroud) 我正在尝试检测我的应用程序中的USB连接,即USB是否连接到设备。
正在棉花糖6.0.1(sdk23)上进行测试
但是我无法接收广播动作ACTION_USB_DEVICE_ATTACHED或ACTION_USB_DEVICE_DETACHED。
我尝试同时使用动态方式和AndroidManifest.xml方式,但均无效。
这是我的代码:
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.gokulnc.blah_blah"
android:installLocation="auto"
android:versionCode="15"
android:versionName="1.5.1">
<uses-feature android:name="android.hardware.usb.host" />
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="23" />
<android:uses-permission android:name="android.permission.USB_PERMISSION" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:vmSafeMode="false">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/DrawerTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<receiver android:name="mUsbReceiver">
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
</intent-filter>
</receiver>
</activity>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
MainActivity.java:
public class MainActivity extends AppCompatActivity {
BroadcastReceiver mUsbReceiver;
public void onCreate(Bundle savedInstanceState) {
.....
setBroadcastReceivers();
}
void setBroadcastReceivers() { …Run Code Online (Sandbox Code Playgroud) android android-intent android-broadcast android-broadcastreceiver
我正在构建一个应用程序,它需要在设备启动时自动启动服务。
我想用 adb 测试这个功能。当我从 adb 发出以下命令时
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED
Run Code Online (Sandbox Code Playgroud)
我收到以下错误。
Broadcasting: Intent { act=android.intent.action.BOOT_COMPLETED }
java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.BOOT_COMPLETED from pid=3566, uid=2000
at android.os.Parcel.readException(Parcel.java:1683)
at android.os.Parcel.readException(Parcel.java:1636)
at android.app.ActivityManagerProxy.broadcastIntent(ActivityManagerNative.java:3507)
at com.android.commands.am.Am.sendBroadcast(Am.java:772)
at com.android.commands.am.Am.onRun(Am.java:404)
at com.android.internal.os.BaseCommand.run(BaseCommand.java:51)
at com.android.commands.am.Am.main(Am.java:121)
at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:262)
Run Code Online (Sandbox Code Playgroud)
根据这个答案stackoverflow.com/a/10105047/106248其他人没有遇到这个问题。
我测试的操作系统版本是Android 7.0。我在真实设备和模拟器上都面临同样的问题。
请帮我解决问题。
谢谢
我正在使用React Native构建应用程序,我想使用Android服务NotificationListenerService.为了从服务中捕获数据,我需要一个广播接收器.如何在React Native Environment中设置BroadcastReceiver?
service android react-native android-broadcastreceiver notification-listener
因此,我已按照此指南显示收到短信时的简单吐司.虽然它在应用程序运行时正常工作,但当我进入设置并强制关闭应用程序时,它会停止工作.
我在StackOverflow上检查了很多关于simmilar问题的答案,但没有人真正回答是否(以及如何)在每次收到短信时都可以执行一段代码,而不会将应用程序设置为设备上的默认短信应用程序(Android) 4.4或以上版本).是吗?
考虑甚至可以停止服务,当发生这种情况时,服务不再是解决方案.
我对API等级19+感兴趣
谢谢
我有一个BroadcastReceiver接收发送给Fragment的广播.我正在接收广播,但我如何从Fragment本身调用一个方法?一旦广播到达,我基本上需要更新List,List&update方法是Fragment的一部分.
public class FragmentReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(action != null && action.equals("AllTasksFragmentUpdate"))
{
//
}
}
}
Run Code Online (Sandbox Code Playgroud)
注册接收者:
@Override
public void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getActivity().registerReceiver(new FragmentReceiver(), new IntentFilter("AllTasksFragmentUpdate"));
}
Run Code Online (Sandbox Code Playgroud)
如何从Fragment中调用该方法?
android broadcastreceiver android-fragments android-broadcastreceiver
我已经使用 Intent 打开“位置设置”菜单以在我的 Activity 中启用GPS。调用 Intent 后,我使用了一个服务来监听位置更新。我BroadcastReceivers从 Service 发送了两个到 Activity。在onResume()Activity 的方法中,我想访问从服务传递的数据。但是当我单击后退按钮时,应用程序崩溃了。它说BroadcastReceiver尚未注册。但我已经注册了两个BroadcastReceivers.
错误:
\n\n\njava.lang.RuntimeException:无法销毁活动 {com.example.jobinsabu.ohxee/com.example.jobinsabu.ohxee.AddOffers.AddOffers}:java.lang.IllegalArgumentException:接收器未注册:com.example.jobinsabu.ohxee。 AddOffers.AddOffers$7@8cd71b4\n 在 android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4137)\n 在 android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4155)\n 在 android.app.ActivityThread.access $1500(ActivityThread.java:177)\n 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1484)\n 在 android.os.Handler.dispatchMessage(Handler.java:102)\n 在 android.os .Looper.loop(Looper.java:135)\n 在 android.app.ActivityThread.main(ActivityThread.java:5910)\n 在 java.lang.reflect.Method.invoke(Native Method)\n 在 java.lang .reflect.Method.invoke(Method.java:372)\n 位于 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)\n 位于 com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1200)\n 原因为:java.lang.IllegalArgumentException:接收器未注册:com.example.jobinsabu.ohxee.AddOffers.AddOffers$7@8cd71b4\n 位于 android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java :830)\n 在 android.app.ContextImpl.unregisterReceiver(ContextImpl.java:1850)\n 在 android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:518)\n 在 com.example.jobinsabu.ohxee.AddOffers。 AddOffers.onDestroy(AddOffers.java:448)\n 位于 android.app.Activity.performDestroy(Activity.java:6418)\n 位于 android.app.Instrumentation。callActivityOnDestroy(Instrumentation.java:1153)\n 在 android.app.ActivityThread.performDestroyActivity(ActivityThread.java:4124)\n 在 android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:4155)\xc2\xa0\n 在 android .app.ActivityThread.access$1500(ActivityThread.java:177)\xc2\xa0\n 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1484)\xc2\xa0\n 在 …
我正在从事聊天项目
我在这里所做的是与连接人员的服务,我设置了一个广播接收器以从服务获取数据
这是接收者代码
mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
try {
final String code = intent.getExtras().get("code").toString();
final JSONObject Message = new JSONObject(intent.getExtras().get("msg").toString());
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d("test","test");
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
};
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,new IntentFilter("data"));
Run Code Online (Sandbox Code Playgroud)
问题是当我关闭活动时 runOnUiThread 内的代码调用多次
如果我关闭活动并打开它,它会调用 2 次,如果我再次执行它,它会调用 3 次,依此类推
android broadcast broadcastreceiver android-runonuithread android-broadcastreceiver
我在应用程序清单中注册了一个广播接收器来接收 BOOT_COMPLETED 通知。重新启动移动设备后,我没有收到任何通知。但是,当我打开应用程序时,我确实收到了通知。请协助。
从我的清单中接收启动完成权限:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
Run Code Online (Sandbox Code Playgroud)
我的清单中的接收者:
<receiver android:name=".BootCompletedReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
BootCompletedReceiver 类:
public class BootCompletedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Boot Completed Received", Toast.LENGTH_LONG).show();
}
Run Code Online (Sandbox Code Playgroud)