BroadcastReceiver我的应用程序中有一个,其定义AndroidManifest.xml如下:
<receiver android:name=".receiver.MyTaskReceiver">
<intent-filter>
<action android:name="xxx.xxx.xxx" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
这是MyTaskReceiver代码:
public class MyTaskReceiver extends BroadcastReceiver {
private ReceiverListener listener ;
@Override
public void onReceive(Context context, Intent intent) {
//do general things
if(listener != null) {
listener.received(); //do special things if the listener is setted up.
}
}
public void setListener(ReceiverListener listener) {
this.listener = listener;
}
public interface ReceiverListener {
void received();
}
}
Run Code Online (Sandbox Code Playgroud)
当接收者有意图时,我会先做一些一般的事情,比如保存数据...
但是如果向用户显示指定的活动,我需要更改活动的视图,因此我使用它ReceiverListener来执行此操作.设置一个监听器MyTaskReceiver中onCreate,并设置null在onDestroy …
我正在尝试使用为其定义的按钮(操作)创建一个简单的通知。我设法正确显示它并为我的操作创建了一个 PendingIntent。我还创建了一个 BroadcastReceiver,应该在单击我的操作时调用它。但它的 onReceive() 方法没有被调用。我不知道为什么。我还在 AndroidManifest.xml 中注册了 BroadcastReceiver
主活动.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button notify = (Button) findViewById(R.id.notify);
notify.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent dismissIntent = new Intent("action1");
dismissIntent.setAction("action1");
PendingIntent action1intent = PendingIntent.getBroadcast(MainActivity.this, (int) System.currentTimeMillis(), dismissIntent, PendingIntent.FLAG_CANCEL_CURRENT);
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(MainActivity.this)
.setSmallIcon(R.drawable.ic_menu)
.setContentTitle("My notification")
.setContentText("Hello World!")
.addAction(R.drawable.ic_menu, "action 1", action1intent);
Intent resultIntent = new Intent(MainActivity.this, MainActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(MainActivity.this);
stackBuilder.addParentStack(MainActivity.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = …Run Code Online (Sandbox Code Playgroud) android broadcastreceiver android-notifications android-broadcast android-broadcastreceiver
我试图使用PendingIntent将自定义的Serialized对象从我的IntentService传递给BroadcastReceiver.
这是我的自定义对象:
Row.java
public class Row implements Serializable {
private String name;
private String address;
public Row(BluetoothDevice device) {
this.name = device.getName();
this.address = device.getAddress();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的IntentService
MyIntentService.java
public class MyIntentService extends IntentService {
public MyIntentService() {
super("MyIntentService");
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
protected void onHandleIntent(Intent workIntent) {
AlarmManager alarmMgr;
PendingIntent alarmPendingIntent;
Intent alarmIntent;
// The object "RowsList" is passed from my MainActivity and is correctly received by my IntentService.
// NO PROBLEMS HERE
Row[] …Run Code Online (Sandbox Code Playgroud) java android android-pendingintent android-broadcastreceiver
我已经阅读了其他存在的线程,但是它们都无法解决我的问题。
我正在构建一个应用程序,该应用程序在没有互联网的情况下缓存消息并将其存储到数据库中。这个想法是,当有网络连接时,它从数据库中提取数据并在后台发送消息-为此,我制作了一个广播接收器,并使其接收“ android.net.conn.CONNECTIVITY_CHANGE”广播-然后制作了该应用将消息发布到服务器
网络更改时出现的错误:
java.lang.RuntimeException: Unable to instantiate receiver com.tanvirsingh.fragmentsdemo.NetworkChangeReceiver: java.lang.InstantiationException: java.lang.Class<com.tanvirsingh.fragmentsdemo.NetworkChangeReceiver> has no zero argument constructor
Run Code Online (Sandbox Code Playgroud)
广播接收器类(NetworkChangeReceiver.java):
public class NetworkChangeReceiver extends BroadcastReceiver{
private static final String TAGNCR = "JSON";
private final Handler handler; // Handler used to execute code on the UI thread
public NetworkChangeReceiver(Handler handler) {
this.handler = handler;
}
DataBaseHelper myDB;
final String MESSAGES_ENDPOINT = "";
@Override
public void onReceive(Context context, Intent intent) {
int[] type = {ConnectivityManager.TYPE_MOBILE, ConnectivityManager.TYPE_WIFI};
if (isNetworkAvailable(context) == true){
//check for messages to …Run Code Online (Sandbox Code Playgroud) java android broadcastreceiver android-broadcast android-broadcastreceiver
我正在尝试让两个应用程序通过广播进行通信。第一个应用程序使用以下代码发送广播:
Intent outIntent = new Intent("org.example.WHATEVER");
PackageManager pm = this.getPackageManager();
List<ResolveInfo> receivers = pm.queryBroadcastReceivers(outIntent, 0);
if (receivers != null)
for (ResolveInfo receiver : receivers) {
Log.d("Sender", String.format("Polling %s", receiver.activityInfo.packageName));
outIntent = new Intent("org.example.WHATEVER");
outIntent.setPackage(receiver.activityInfo.packageName);
sendBroadcast(outIntent);
}
Run Code Online (Sandbox Code Playgroud)
接收端BroadcastReceiver在清单中注册一个:
<receiver android:name="org.example.receiverapp.WhateverReceiver" >
<intent-filter>
<action android:name="org.example.WHATEVER" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
该onReceive()方法在调用时写入一个日志条目。
当接收应用程序运行时(即,我的主要活动在屏幕上显示,然后离开它进行导航),它将处理广播。但是,如果接收器应用程序没有运行(我通过长按“后退”并已在“开发人员设置”中激活“长按后退以杀死应用程序”来确保),则广播不会将其唤醒。
我特意为此设置了一个软件包名称,以避免清单声明的接收方不再从Android 8开始接收隐式广播的问题。此外,我正在运行Android 7,两个应用程序均以API 23为目标,因此无论如何,Android 8中的任何限制在此设置中均无关紧要。
我遇到了一条评论,该评论的作者认为某些Android风格可能无法唤醒广播应用程序,这似乎是我在这里遇到的问题(运行LineageOS 14.1),尽管该评论不是很具体,我还没有发现了支持此主张的其他任何内容。
这是这里发生的事吗?如果是这样,如何确保广播唤醒了接收器应用程序(至少在定向的情况下)?如果没有,这是怎么了?
我希望用户能够共享/发送到我的应用程序,但我不想启动活动(我只需要在网络上发送一些数据,并显示成功消息弹出窗口)。我正在想象为此使用广播接收器,但是下面显示的意图过滤器虽然在正常活动中工作,但不适用于接收器(即我的应用程序没有显示在我可以共享的内容列表中) )。
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
我应该在这里使用接收器,还是有其他方法可以捕获 SEND 意图而不启动完整的活动?
我正在尝试通过 ADB 检查是否使用了外部有线耳机麦克风。当我插入有线耳机时,会自动检测到此麦克风,但出于外部脚本编写的目的,检测此操作将非常有帮助。
我找不到麦克风的意图,但在此处查找了耳机意图: http://developer.android.com/reference/android/content/Intent.html
我尝试了这个广播意图来单独检测耳机:
adb shell am broadcast -a android.intent.action.HEADSET_PLUG
Run Code Online (Sandbox Code Playgroud)
无论有线耳机是否实际插入,都会得到此响应:
Broadcasting: Intent { act=android.intent.action.HEADSET_PLUG }
Broadcast completed: result=0
Run Code Online (Sandbox Code Playgroud)
所以我不知道从这里该去哪里。我什至无法检测耳机是否已插入,更不用说是否正在使用外部麦克风了。任何帮助将不胜感激。谢谢!
我正在创建一个BroadcastReceiver来监听Wi-Fi连接的变化:
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ConnectivityManager.CONNECTIVITY_ACTION.equals(action)) {
NetworkInfo networkInfo = (NetworkInfo) intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); // deprecated
// Get connectivity details from networkInfo...
}
}
}, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
Run Code Online (Sandbox Code Playgroud)
但是,ConnectivityManager.EXTRA_NETWORK_INFO已弃用,那么如何获取NetworkInfo对象呢?
有一个名为 Mobilock 的信息亭应用程序。这个应用程序的启动速度比我自己的以 BOOT_COMPLETED 广播启动的应用程序要快得多(几乎提前了 5 秒)。
我自己的应用程序具有最高优先级,即整数的最大值。所以这不是优先级的问题。
这些人找到了一种比 BOOT_COMPLETED 广播早 5 秒启动应用程序的方法。
有人知道他们在做什么吗?
我希望使用新的Activity过渡API,在按照此处的教程进行操作后,我无法获得所需的结果。
这是我用于设置要检测的活动过渡的代码:
public void setActivityTransitions() {
transitionList = new ArrayList<>();
ArrayList<Integer> activities = new ArrayList<>(Arrays.asList(
DetectedActivity.STILL,
DetectedActivity.WALKING,
DetectedActivity.ON_FOOT,
DetectedActivity.RUNNING,
DetectedActivity.ON_BICYCLE,
DetectedActivity.IN_VEHICLE));
for (int activity :
activities) {
transitionList.add(new ActivityTransition.Builder()
.setActivityType(activity)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_ENTER).build());
transitionList.add(new ActivityTransition.Builder()
.setActivityType(activity)
.setActivityTransition(ActivityTransition.ACTIVITY_TRANSITION_EXIT).build());
}
}
Run Code Online (Sandbox Code Playgroud)
然后请求活动转换更新:
ActivityTransitionRequest activityTransitionRequest = new ActivityTransitionRequest(transitionList);
Intent intent = new Intent(context, ActivityDetectorTransitionService.class);
intent.setAction("com.test.activityrecognition.START_ACTIVITY_TRANSITION_DETECTION_ALARM");
PendingIntent pendingIntent = PendingIntent.getService(context, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Task<Void> task = ActivityRecognition.getClient(context).requestActivityTransitionUpdates(activityTransitionRequest, pendingIntent);
task.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void result) {
System.out.println("onSuccess");
}
});
task.addOnFailureListener(new OnFailureListener() …Run Code Online (Sandbox Code Playgroud) android android-pendingintent activity-recognition android-broadcastreceiver activitytransitionapi