我知道如何获得配对设备列表,但我怎么知道它们是否已连接?
它必须是可能的,因为我看到它们列在我手机的蓝牙设备列表中,并说明了它们的连接状态.
我似乎无法找到一种方法来了解Android是否插入了耳机.我发现了各种解决方案,但它们似乎总是返回假.唯一似乎正常工作的是a BroadcastReceiver,但这不是我需要的:
我只需要这样的东西
if(headphones plugged in) {
}
Run Code Online (Sandbox Code Playgroud)
有这样的功能吗?它需要一些特殊权限吗?
我有一个Android应用程序,它使用Awareness API在插入耳机时设置围栏.
我使用代码实现了AwarenessFence,就像以下示例中所示:https://developers.google.com/awareness/android-api/fence-register.
我有一个PendingIntent定义为:
PendingIntent.getBroadcast(context, 0, new Intent("my.application.packageFENCE_RECEIVER_ACTION"), 0)
Run Code Online (Sandbox Code Playgroud)
然后在我的AndroidManifest.xml文件中
<receiver android:name=".fence.FenceDetector$MyFenceReceiver">
<intent-filter>
<action android:name="my.application.packageFENCE_RECEIVER_ACTION" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
这是在Manifest中声明的,因为即使我的应用程序在后台,我也希望接收广播.
这在Android 7.0及更低版本上运行良好,但是当我在Android 8.0上运行时,我收到错误:
BroadcastQueue: Background execution not allowed: receiving Intent { act=my.application.packageFENCE_RECEIVER_ACTION
Run Code Online (Sandbox Code Playgroud)
我认为这是由于Android O上后台执行的新限制.
任何人都可以告诉我如何注册一个广播接收器,它可以在运行API 26的Android设备上在后台监听感知围栏触发器.
让我知道如果有些事情不清楚或者我需要详细说明.
提前致谢
android broadcastreceiver android-broadcastreceiver google-awareness android-8.0-oreo
嗨,我正在开发一个应用程序,当从手机中删除耳机时生成一个事件.我用接收方法创建了一个广播接收器
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String action = intent.getAction();
Log.i("Broadcast Receiver", "Hello");
if( (action.compareTo(Intent.ACTION_HEADSET_PLUG)) == 0) //if the action match a headset one
{
int headSetState = intent.getIntExtra("state", 0); //get the headset state property
int hasMicrophone = intent.getIntExtra("microphone", 0);//get the headset microphone property
if( (headSetState == 0) && (hasMicrophone == 0)) //headset was unplugged & has no microphone
{
//do whatever
}
}
}
Run Code Online (Sandbox Code Playgroud)
调用此方法如下
IntentFilter receiverFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
HeadSetBroadCastReceiver receiver …Run Code Online (Sandbox Code Playgroud) 一旦设备进入打盹模式,第三方应用程序是否可以获得操作?
尝试注册广播接收器以执行以下操作,
<receiver android:name="com.doze.sample.DozemodeReceiver" android:enabled="true">
<intent-filter>
<action android:name=" android.os.action.DEVICE_IDLE_MODE_CHANGED" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
它不起作用(接收器没有被调用).
我知道如何检测耳机是否插入,但有些耳机(如三星EHS60ANNBE)来与暂停/播放(又名KeyEvent的.KEYCODE_HEADSETHOOK)按钮只,没有了上一页/下一页...
我希望能够检测当前插入Android设备的耳机是否具有PREV/NEXT(又名KeyEvent.KEYCODE_ MEDIA_PREVIOUS /KeyEvent.KEYCODE_ MEDIA_NEXT).
这可能吗?
我在Android 2.1中工作,我想检测耳机插入/取出的时间.我对android很新.
我认为这样做的方法是使用广播接收器.我放弃了这个,我还在AndroidManifest.xml中添加了以下内容.但你是否必须在其他方面注册接收器,就像在活动中一样?我知道这有很多线索,但我真的不明白他们在谈论什么.另外,在AndroidManifest.xml中注册与在活动中动态注册之间的区别是什么?
<receiver android:enabled="true" android:name="AudioJackReceiver" >
<intent-filter>
<action android:name="android.intent.action.HEADSET_PLUG" >
</action>
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
这是该类的实现(加上进口)
public class AudioJackReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.w("DEBUG", "headset state received");
}
Run Code Online (Sandbox Code Playgroud)
}
我只是想看看它是否有效,但是当我在运行应用程序时拔下/插入耳机时没有任何显示.
编辑:文档没有说明这一点,但如果在清单中注册,这个可能无法正常工作吗?当我在我的一个应用程序中注册接收器时,我能够让它响应(或者你还必须这样做吗?)