我想在我的主要活动中创建一个广播接收器作为内部类.但我在清单xml文件中定义广播接收器时遇到问题,因为android无法找到它.
码:
public class MyActivity extends Activity{
...
public class Receiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
....
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
表现:
<receiver android:name=".org.danizmax.myapp.MyActivity$Receiver" android:enabled="true">
<intent-filter>
<action android:name="org.danizmax.myapp.BROADCAST_INITIAL_DATA"></action>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
我尝试过:
我看到其他人也有类似的问题,但没有找到任何答案.
那有可能吗?如果没有,有什么更好的方式来使用广播接收器?
谢谢!
我试图用一个BroadcastReceiver作为一个内部类来跟踪网络状态,但我得到了标题中的例外.我该怎么做才能解决这个问题?
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
final ConnectivityManager connMgr = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
final android.net.NetworkInfo wifi = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
final android.net.NetworkInfo mobile = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (wifi.isAvailable() || mobile.isAvailable()) {
setupData();
Log.d("Netowk Available ", "Flag No 1");
}
}
}
Run Code Online (Sandbox Code Playgroud) 代码示例:
public class Foo
{
public class Bar
{
public void printMesg(String body)
{
System.out.println(body);
}
}
public static void main(String[] args)
{
// Creating new instance of 'Bar' using Class.forname - how?
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以创建类Bar的新实例给它的名字?我试着用:
Class c = Class.forName("Foo$Bar")
Run Code Online (Sandbox Code Playgroud)
它找到了类,但是当我使用c.newInstance()时它会抛出InstantiationException.
我有与此帖相同的问题:电池广播接收器不起作用.但似乎没有人回答这个问题.
这是我的BroadcastReceiver:
public class BatteryLevelReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
Log.v("plugg", "plug change fired");
Toast.makeText(context, " plug change fired", Toast.LENGTH_LONG).show();
}
Run Code Online (Sandbox Code Playgroud)
这是我的AndroidManifest.xml:
<receiver android:name=".ReceversAndServices.BatteryLevelReceiver">
<intent-filter android:priority="900">
<action android:name="android.intent.action.BATTERY_LOW" />
</intent-filter>
</receiver>
<receiver android:name=".ReceversAndServices.BatteryLevelReceiver">
<intent-filter android:priority="900">
<action android:name="android.intent.action.BATTERY_CHANGED" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
我还在清单中添加了这一行:
<uses-permission android:name="android.permission.BATTERY_STATS"/>
Run Code Online (Sandbox Code Playgroud)
但仍然没有成功!
如果有人能告诉我我做错了什么,我真的很感激.
我正在尝试接收物理按钮事件,例如手机侧面的音量按钮点击.我需要在服务中执行此操作,因为如果用户随时单击"音量调高/调低"按钮,我希望收到该消息.我在网上看了很多,但我不能让它工作,不知道什么是错的.这是我的代码:
在清单中:
<receiver android:name=".clsMediaButtonReceiver" >
<intent-filter android:priority="1000" >
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
在服务OnStart()中:
AudioManager manager = (AudioManager) getSystemService(AUDIO_SERVICE);
manager.registerMediaButtonEventReceiver(new ComponentName(getPackageName(), clsMediaButtonReceiver.class.getName()));
Run Code Online (Sandbox Code Playgroud)
一个broascastreceiver:
public class clsMediaButtonReceiver extends BroadcastReceiver
{
@Override public void onReceive(Context context, Intent intent)
{ //This is never shown
Toast toast1 = Toast.makeText(Context, intent.getAction(), Toast.LENGTH_SHORT);
toast1.show();
}
}
Run Code Online (Sandbox Code Playgroud)