Articles of 广播

Android:BroadcastReceiver意图检测相机拍摄的照片?

我正在开发一个Android应用程序,每次使用手机拍摄新图像时都需要执行一个操作。 我不想在应用程序中拍摄图像,而是在相机应用程序拍摄图像并将其保存到SD卡时执行一些操作。 现在,我得到了一个BroadcastReceiver,目前正在侦听“android.intent.action.CAMERA_BUTTON”。 但是,这似乎并没有被调用,当我想要它。 我尝试在自己的电话上用BroadcastReceiver的OnReceive方法的第一行中的换行符来debugging应用程序,但它永远不会到达该代码。 有谁知道我应该听的正确意图是什么? 还是使用BroadcastReceiver甚至不是最好的方式来做到这一点? (例如,有没有更好的方法来完成这一点,比如听一个新的图像保存到卡上)? 谢谢! 更新:我的手机上有一个轨迹球(HTC Eris),那么以这种方式拍摄照片可能不会作为“相机button”发送? 如果是这样,有没有一个“相机button”,而是像一个轨迹球的手机的解决方法?

Android – sendOrderedBroadcast的帮助

我想在我的Android应用程序中使用sendOrderedBroadcast 。 我希望能够将Intent从我的应用程序发送到另一个应用程序,然后我想从接收Intent的应用程序获取数据,在这种情况下是布尔值true或false。 这是当前的代码: Intent i = new Intent(); i.setAction(GlobalData.PROPOSE_IN_DOMAIN_ROAM_INTENT); i.putExtra("com.testnetworks.QCLEVEL", aProposedTheoreticalQoSLevel); sendOrderedBroadcast(i, null, null, null, Activity.RESULT_OK, null, null); 这是实现我想要的正确方法吗? 如果是这样,我用什么作为resultReceiver *参数? (第三个参数) 那么如何从广播中接收数据呢? 我做了一个快速的谷歌,并没有拿出任何例子,任何帮助或例子非常感谢。 更新代码: sendOrderedBroadcast(i, null, domainBroadcast, null, Activity.RESULT_OK, null, null); class DomainBroadcast extends BroadcastReceiver{ @Override public void onReceive(Context arg0, Intent intent) { String action = intent.getAction(); if(GlobalData.PROPOSE_IN_DOMAIN_ROAM_INTENT.equals(action)){ Log.d("BROADCAST", "Returning broadcast"); Bundle b […]

在Android中检测用户回答的来电结束? (没有拒绝)

在我的android应用程序中,我创build了一个可以检测来电的BroadcastReceiver ; 我的代码运行得很好。 如果有来电( EXTRA_STATE_RINGING ),我可以在logcat中看到我的input号码,当用户接听电话时( EXTRA_STATE_OFFHOOK ) 我使用shared preferences将来电号码(string)存储在振铃状态,然后使其处于摘机状态。 这是我的代码,它完美的作品: public class IncomingCallReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String incomingNumber = null ; if (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)) { // Ringing state // Phone number incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER); Log.i("test2", incomingNumber); SharedPreferences myPrefs = context.getSharedPreferences("myPrefs",Context.MODE_WORLD_WRITEABLE); SharedPreferences.Editor prefsEditor = myPrefs.edit(); prefsEditor.putString("Incomingnumber", incomingNumber); //Not […]

Android如何在iOS上广播BLE本地名称?

我有一个Android应用程序广告与服务的UUID和本地名称的广播数据。 问题是这个“本地名称”(aka蓝牙设备名称)被限制为8个字符,每个都是一个16位的unicode表示,因此每个字符2个字节。 任何时候我尝试将设备的名称更改为9个字符长,因为错误1,所以无法启动无线广播 public static final int ADVERTISE_FAILED_DATA_TOO_LARGE = 1; 我知道GAPconfiguration文件广播数据包是27个字节长,7个用于标题,所以20应该保持自由使用,而不仅仅是16? 这是真正的腌制让我的镍发痒的: 当iOS广播可变广告标题时,我会将设备的完整本地名称作为ScanRecord的一部分,而不仅限于16个字节。 只有部分广播,我没有在这里build立GATT连接。 iOS如何做到这一点? 例如,在我的Android上,我能够从iOS广告广播中检索到14个字符,长度为28个字节的唯一ID。 28字节比蓝牙4.0标准规定的27字节限制更长。 Android如何能够接收超过27字节的全部广播? 那么我的“本地名称”或设备名称最多只能有8个字符或16个字节,否则将无法开始播放? 这是我的代码: final BluetoothLeAdvertiser advertiser = mBluetoothAdapter.getBluetoothLeAdvertiser(); //advertise settings final AdvertiseSettings.Builder settingsBuilder = new AdvertiseSettings.Builder(); settingsBuilder.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY); settingsBuilder.setConnectable(true); settingsBuilder.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH); //advertise data AdvertiseData.Builder dataBuilder = new AdvertiseData.Builder(); ParcelUuid uuid = new ParcelUuid(UUID.fromString("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")); dataBuilder.addServiceUuid(uuid); mBluetoothAdapter.setName("12345678"); //8 characters works, 9+ fails […]

蓝牙广播

我想通过蓝牙将数据从一个设备广播到附近的众多设备。 现在,我知道存在蓝牙广播,但是使用Android现有的API有可能吗? 如果没有,那里有没有其他第三方API可用? 关于蓝牙广播的另一个问题:即使您从广播开始以来没有收听,您是否可以开始收听正在进行的广播并从中接收数据? 例如,让设备A成为广播公司,他在5秒钟内播放以下数据: 1 2 3 4 5 6 7 8 9 10 设备B在整个广播过程中收到数据,所以他收到: 1 2 3 4 5 6 7 8 9 10 接收到的设备C仅在2秒后开始收听,而设备A正在播放5 。 他会按预期收到剩下的( 5 6 7 8 9 10 )吗?

PACKAGE_REMOVED&PACKAGE_ADDED与PACKAGE_REPLACED Intent Action一起被触发

所有我想要做的是更新我的列表在每个安装和卸载,而不是包装replace。所以主要的问题是安装和卸载意图启动每个replace操作。 所以为此我已经实施了一个BroadcastReciever如下 <receiver android:name =".IntentReceiverTest.AppReciever"> <intent-filter> <action android:name="android.intent.action.PACKAGE_REMOVED"/> <action android:name="android.intent.action.PACKAGE_REPLACED"/> <action android:name="android.intent.action.PACKAGE_ADDED"/> <data android:scheme="package"/> </intent-filter> </receiver> 在每个replace我得到3个广播与行动 首先用PACKAGE_REMOVED触发AppReciever 然后在PACKAGE_ADDED之后再次触发AppReciever 几秒钟后PACKAGE_REPLACED再次触发AppReciever 所以请build议任何更好的方法来捕捉replace行动 要么 由于PACKAGE_REMOVED和PACKAGE_ADDED操作, 阻止以前启动的服务的一种方法。

正确的模式来获取BroadcastReceiver中的WakeLock并将其释放到服务中

即使经过大量的研究,我仍然不能完全确定如何实现一个由BroadcastReceiver启动的Service的WakeLock是正确的 – 即使它似乎工作正常。 广播接收器从报警中获得发送给它的意图,所以从AlarmManager的API文档AlarmManager : 如果您的警报接收器调用了Context.startService(),则在请求的服务启动之前,手机可能会睡眠。 为了防止这种情况发生,您的BroadcastReceiver和Service将需要实施一个单独的唤醒locking策略,以确保电话继续运行,直到服务可用。 所以,在onReceive()我做: Intent serviceIntent = new Intent(context, SomeService.class); context.startService(serviceIntent); if(SomeService.wakeLock == null) { PowerManager powerManager = (PowerManager)context.getSystemService(Context.POWER_SERVICE); SomeService.wakeLock = powerManager.newWakeLock( PowerManager.PARTIAL_WAKE_LOCK, SomeService.WAKE_LOCK_TAG); } if(! SomeService.wakeLock.isHeld()) { SomeService.wakeLock.acquire(); } 并在服务我做: try { // Do some work } finally { if(wakeLock != null) { if(wakeLock.isHeld()) { wakeLock.release(); } wakeLock = null; […]

在configuration活动启动时调用的小部件onUpdate

我正在实现一个小部件,我面临以下问题: 1)即使我指定了一个configuration活动,当我将这个小部件添加到主屏幕时, onUpdate被调用。 只要我将它添加到主屏幕,发送APPWIDGET_ENABLED广播,然后APPWIDGET_UPDATE ,然后configuration活动启动..这是一个错误? 我应该如何理解在configuration活动返回之前被调用的onUpdate方法? 我可以通过共享的首选项值来实现,但是我希望它像开发人员指南中所写的那样工作,即不应该调用onUpdate方法。 2) onUpdate没有被调用每个updatePeriodMillis秒,已被设置为10000 ,即10秒的testing目的..我错过了在清单文件中的receiver声明中的东西? 我不断收到林特警告出口接收器不需要许可,但我认为这是一个Lint问题,而不是我的错。 编辑 :我刚刚在参考文档中发现这个: 注意:updatePeriodMillis所要求的更新将不会每隔30分钟发送一次。 所以没有更新widget的频率是正确的,我已经改变了1800000毫秒的时间。 3)我想将我自己的广播动作传递给小部件提供者,在目标相同的提供者类的Manifest中添加另一个receiver块是否正确,或者是否应该在包含APPWIDGET_UPDATE动作的intent-filter中只添加另一个intent动作? 顺便说一句,我已经评论了我的第二个receiver块,这不是上述问题的原因。 我创build了另一个receiver块,因为我想将其声明为未导出,以便只通过我的应用程序代码而不是其他任何人触发intent-filter操作。 AndroidManifest.xml中 <receiver android:name="MyWidgetProvider" android:exported="true"> <intent-filter> <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> </intent-filter> <meta-data android:name="android.appwidget.provider" android:resource="@xml/my_widget_info" /> </receiver> <receiver android:name="MyWidgetProvider" android:exported="false"> <intent-filter> <action android:name="org.test.mywidget.FORCE_SMALL_WIDGET_UPDATE" /> </intent-filter> </receiver> my_widget_info.xml <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minWidth="294dp" android:minHeight="110dp" android:updatePeriodMillis="1800000" android:initialLayout="@layout/my_widget_layout" android:configure="org.test.mywidget.MyWidgetConfiguration" android:resizeMode="none"> </appwidget-provider>

为什么BroadcastReceiver即使在应用程序在后台工作?

我正在使用BroadcastReceiver在我的应用程序中检查Internet连接,如果连接丢失,我会显示一个警告对话框。 它工作正常。 但我的问题是,即使我的应用程序在背后,BroadcastReceiver的工作原理。 因此,即使用户在其他应用程序中,互联网连接丢失,对话框也会popup。 这是完全毁了我的应用程序。 有没有人有任何想法如何在应用程序中限制广播接收器? 这是我的BroadcastReceiver: public class ConnectivityChangedReceiver extends BroadcastReceiver{ @Override public void onReceive( Context context, Intent intent ) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService( Context.CONNECTIVITY_SERVICE ); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) { } else { try{ Intent i=new Intent(context, InternetDialogActivity.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } catch(Exception e){ e.printStackTrace(); } […]

什么触发BluetoothDevice.ACTION_ACL广播?

我想知道远程物理设备中的事件在监听设备中触发ACTION_ACL_CONNECTED和ACTION_ACL_DISCONNECTED。 我的testing结果没有意义。 我已经收集了几个分米之内的几个设备: 运行Android 3.1的Galaxy Tab P7500 运行Android 2.2的i5500手机 一个带有蓝牙USBencryption狗的PC winXP 两个带开/关button的耳机 首先,我手动配对Tab中的所有设备。 PC和手机都不能与其他任何设备配对,但Tab。 (其中一个耳机不能以任何方式被标签find,但是可以通过手机和编程方式轻松find)。 然后,我有一个简单的应用程序来启动发现,并侦听并显示ACL广播。 这就是发生了什么事(每次都是一样的,它的疯狂一致): 启用所有设备的Tab中的startDiscovery(): – PC是唯一find的设备 禁用PC上的蓝牙: – 在标签上没有反应 在PC上启用蓝牙: – 在Tab上没有反应 第一次打开耳机电源: – 选项卡上的ACTION_ACL_CONNECTED closures耳机: – 在Tab上没有反应 再次打开头戴式耳机: – 标签上快速连续的ACTION_ACL_DISCONNECTED和ACTION_ACL_CONNECTED 在选项卡上禁用蓝牙: – 在选项卡上没有反应 在标签上启用蓝牙: – 标签上的耳机ACTION_ACL_CONNECTED startDiscovery()从手机: – PC是唯一的手机find的设备,虽然手机只与配对选项卡,而不是与PC。 否则,手机只会对Tab从不作出反应的耳机作出反应。 怎么弄出这个烂摊子? 即使配对并在范围内上电,也不能依赖引发ACTION_ACL_CONNECT的设备吗? 这里是BroadcastReceiver的方法和onCreate的活动,但我不希望这个代码中的细节很重要: BroadcastReceiver intentReceiver = new BroadcastReceiver() { public […]