在facebook chatheads中,这是facebook messenger应用程序的一部分,我注意到以下行为:据我所知,聊天头本身和打开的聊天屏幕都是服务的一部分.不涉及任何活动.
我怎么能确定?在我打开的聊天屏幕上按回家后,它被最小化回聊天头,我可以立即重新打开聊天屏幕.如果聊天屏幕是活动,则startActivity(intent)在按下主页按钮后重新打开活动将延迟活动的开始,如此处所指定:
在按下HOME按钮后从服务启动活动而没有延迟5秒
在我的服务onCreate方法中,我使用以下代码从服务中显示UI:
public class ServiceTest extends Service {
...
@Override
public void onCreate() {
super.onCreate();
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
windowManager.addView(someView, params);
}
....
}
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何直接从显示用户界面的服务接收"按下主页按钮"事件?当用户按下主页按钮时,我想最小化我的视图(类似于Facebook聊天头).
我在远程进程中有一个android服务,可以有来自不同客户端的多个绑定.我的问题是,当特定绑定客户端意外断开连接时(即客户端崩溃),如何通知服务?我无法使用onUnbind(),因为只有在所有客户端断开连接后才会调用它.
public class MyService extends Service {
final Messenger mServiceMessenger = new Messenger(new IncomingHandler());
@Override
public IBinder onBind(Intent intent) {
return mServiceMessenger.getBinder();
}
@Override
public void onCreate() {
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return Service.START_STICKY;
}
class IncomingHandler extends Handler {
@Override
public void handleMessage(Message msg) {
// Handling messages logic...
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来获取用户在Android浏览器应用程序上访问的当前URL.我发现我可以Browser.BOOKMARKS_URI使用以下技术从数据库中获取最后访问过的URL :
Cursor cursor = context.getContentResolver().query(Browser.BOOKMARKS_URI,
Browser.HISTORY_PROJECTION, null, null,
Browser.BookmarkColumns.DATE + " DESC");
cursor.moveToNext();
String url = cursor.getString(Browser.HISTORY_PROJECTION_URL_INDEX);
cursor.close();
Run Code Online (Sandbox Code Playgroud)
这样做的问题是,Browser.BOOKMARKS_URI当用户按下以便导航到浏览器中的上一页时,db不会更新,并且查询返回不正确的结果.
请参阅以下示例:
有没有人知道如何返回用户正在查看的正确网址?