我正在尝试为我的应用程序添加自定义快速设置磁贴.我已经关注了Google的示例代码/文档,但我遇到了一些问题.搜索了一段时间后,我找不到任何解决方案.
当我运行我的应用程序时,瓷砖在快速设置托盘中可见,但它仍处于不可用状态.
我需要与瓦片的双向通信流程,即,当用户选择瓦片时,应用程序响应,并且当用户在应用程序内执行特定动作时,切换瓦片UI.
问题似乎来自于尝试将我的自定义TileService类绑定到我的MainActivity – 每当我绑定它时,tile都会进入一直不可用的状态.我似乎无法弄清楚为什么,因为它被绑定成功.如果我没有绑定它(即只是让命令应用程序的磁贴的单向通信),则磁贴处于活动状态,应用程序响应选择它.
最后,我进行绑定以获得对我的自定义TileService类的引用,以便能够调用它的方法toggleTileUI().我不打算使用单例或静态成员变量作为获取对我的服务的引用的解决方案.
这是我在AndroidManifest.xml中的内容:
这是我的ConnectionQuickSettingsService.java:
@TargetApi(24)public class ConnectionQuickSettingsService extends TileService { private static final String TAG = "ConnectionQuickSettingsService"; private final IBinder mBinder = new LocalBinder(); public class LocalBinder extends Binder { ConnectionQuickSettingsService getService() { return ConnectionQuickSettingsService.this; } } @Override public IBinder onBind(Intent i) { return mBinder; } @Override public void onTileAdded() { L.d(TAG,"onTileAdded()"); } @Override public void onStartListening() { L.d(TAG,"onStartListening()"); } @Override public void onClick() { L.d(TAG,"Quick Settings tile selected"); toggleInAppSwitch(); toggleTileUI(); } private void toggleInAppSwitch() { doStuff(); } public void toggleTileUI() { Tile tile = this.getQsTile(); doStuffWithTile(); }}
最后(我的MainActivity.java的相关部分):
@Overrideprotected void onStart() { super.onStart(); Intent i = new Intent(this,ConnectionQuickSettingsService.class); bindService(i,mConnection,Context.BIND_AUTO_CREATE);}@Overrideprotected void onStop() { super.onStop(); if (mBound) { unbindService(mConnection); mBound = false; }}private ServiceConnection mConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName className,IBinder service) { ConnectionQuickSettingsService.LocalBinder binder = (ConnectionQuickSettingsService.LocalBinder) service; mQSService = binder.getService(); mBound = true; L.d(TAG,"Bound to QS service successfully");} @Override public void onServiceDisconnected(ComponentName arg0) { mBound = false; L.d(TAG,"Disconnected from QS service"); }};public void onOnOff(){ L.d(TAG,"On/Off switch toggled"); if (mBound) { mQSService.toggleTileUI(); }}
任何意见都将非常感谢,谢谢!最佳答案你的部分问题是你要重写onBind(),这会破坏onBind()的TileService实现,阻止Android使用你的ConnectionQuickSettingsService.我希望LogCat中的错误消息会从系统进程抱怨这一点.
你的问题的另一部分是你假设getQsTile()在任意时间点工作. It doesn’t.
我建议在你的磁贴上找到一些其他的交互模式,比如使用Meta_DATA_ACTIVE_TILE和requestListeningState(),并删除你的Binder和onBind()方法.
总结 以上是内存溢出为你收集整理的java – 绑定到活动时自定义快速设置平铺仍处于不可用状态全部内容,希望文章能够帮你解决java – 绑定到活动时自定义快速设置平铺仍处于不可用状态所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)