mirror of
https://github.com/PurpleI2P/i2pd.git
synced 2025-04-28 03:37:49 +02:00
setForeground works.
This commit is contained in:
parent
1dae3d951a
commit
46fafebade
10 changed files with 303 additions and 36 deletions
|
@ -0,0 +1,97 @@
|
|||
package org.purplei2p.i2pd;
|
||||
|
||||
import org.qtproject.qt5.android.bindings.QtActivity;
|
||||
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.ServiceConnection;
|
||||
import android.os.Bundle;
|
||||
import android.os.IBinder;
|
||||
|
||||
public class I2PDMainActivity extends QtActivity
|
||||
{
|
||||
|
||||
private static I2PDMainActivity instance;
|
||||
|
||||
public I2PDMainActivity() {}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.qtproject.qt5.android.bindings.QtActivity#onCreate(android.os.Bundle)
|
||||
*/
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
I2PDMainActivity.setInstance(this);
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
//set the app be foreground (do not unload when RAM needed)
|
||||
doBindService();
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.qtproject.qt5.android.bindings.QtActivity#onDestroy()
|
||||
*/
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
I2PDMainActivity.setInstance(null);
|
||||
doUnbindService();
|
||||
super.onDestroy();
|
||||
}
|
||||
|
||||
public static I2PDMainActivity getInstance() {
|
||||
return instance;
|
||||
}
|
||||
|
||||
private static void setInstance(I2PDMainActivity instance) {
|
||||
I2PDMainActivity.instance = instance;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// private LocalService mBoundService;
|
||||
|
||||
private ServiceConnection mConnection = new ServiceConnection() {
|
||||
public void onServiceConnected(ComponentName className, IBinder service) {
|
||||
// This is called when the connection with the service has been
|
||||
// established, giving us the service object we can use to
|
||||
// interact with the service. Because we have bound to a explicit
|
||||
// service that we know is running in our own process, we can
|
||||
// cast its IBinder to a concrete class and directly access it.
|
||||
// mBoundService = ((LocalService.LocalBinder)service).getService();
|
||||
|
||||
// Tell the user about this for our demo.
|
||||
// Toast.makeText(Binding.this, R.string.local_service_connected,
|
||||
// Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
public void onServiceDisconnected(ComponentName className) {
|
||||
// This is called when the connection with the service has been
|
||||
// unexpectedly disconnected -- that is, its process crashed.
|
||||
// Because it is running in our same process, we should never
|
||||
// see this happen.
|
||||
// mBoundService = null;
|
||||
// Toast.makeText(Binding.this, R.string.local_service_disconnected,
|
||||
// Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
};
|
||||
|
||||
private boolean mIsBound;
|
||||
|
||||
private void doBindService() {
|
||||
// Establish a connection with the service. We use an explicit
|
||||
// class name because we want a specific service implementation that
|
||||
// we know will be running in our own process (and thus won't be
|
||||
// supporting component replacement by other applications).
|
||||
bindService(new Intent(this,
|
||||
LocalService.class), mConnection, Context.BIND_AUTO_CREATE);
|
||||
mIsBound = true;
|
||||
}
|
||||
|
||||
void doUnbindService() {
|
||||
if (mIsBound) {
|
||||
// Detach our existing connection.
|
||||
unbindService(mConnection);
|
||||
mIsBound = false;
|
||||
}
|
||||
}
|
||||
}
|
92
qt/i2pd_qt/android/src/org/purplei2p/i2pd/LocalService.java
Normal file
92
qt/i2pd_qt/android/src/org/purplei2p/i2pd/LocalService.java
Normal file
|
@ -0,0 +1,92 @@
|
|||
package org.purplei2p.i2pd;
|
||||
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.app.Service;
|
||||
import android.content.Intent;
|
||||
import android.os.Binder;
|
||||
import android.os.IBinder;
|
||||
import android.support.v4.app.NotificationCompat;
|
||||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
public class LocalService extends Service {
|
||||
// private NotificationManager mNM;
|
||||
|
||||
// Unique Identification Number for the Notification.
|
||||
// We use it on Notification start, and to cancel it.
|
||||
private int NOTIFICATION = R.string.local_service_started;
|
||||
|
||||
/**
|
||||
* Class for clients to access. Because we know this service always
|
||||
* runs in the same process as its clients, we don't need to deal with
|
||||
* IPC.
|
||||
*/
|
||||
public class LocalBinder extends Binder {
|
||||
LocalService getService() {
|
||||
return LocalService.this;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
// mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
|
||||
|
||||
// Display a notification about us starting. We put an icon in the status bar.
|
||||
showNotification();
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
Log.i("LocalService", "Received start id " + startId + ": " + intent);
|
||||
return START_NOT_STICKY;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
// Cancel the persistent notification.
|
||||
//mNM.cancel(NOTIFICATION);
|
||||
stopForeground(true);
|
||||
|
||||
// Tell the user we stopped.
|
||||
Toast.makeText(this, R.string.local_service_stopped, Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public IBinder onBind(Intent intent) {
|
||||
return mBinder;
|
||||
}
|
||||
|
||||
// This is the object that receives interactions from clients. See
|
||||
// RemoteService for a more complete example.
|
||||
private final IBinder mBinder = new LocalBinder();
|
||||
|
||||
/**
|
||||
* Show a notification while this service is running.
|
||||
*/
|
||||
private void showNotification() {
|
||||
// In this sample, we'll use the same text for the ticker and the expanded notification
|
||||
CharSequence text = getText(R.string.local_service_started);
|
||||
|
||||
// The PendingIntent to launch our activity if the user selects this notification
|
||||
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
|
||||
new Intent(this, I2PDMainActivity.class), 0);
|
||||
|
||||
// Set the info for the views that show in the notification panel.
|
||||
Notification notification = new NotificationCompat.Builder(this)
|
||||
.setSmallIcon(R.drawable.itoopie) // the status icon
|
||||
.setTicker(text) // the status text
|
||||
.setWhen(System.currentTimeMillis()) // the time stamp
|
||||
.setContentTitle(getText(R.string.local_service_label)) // the label of the entry
|
||||
.setContentText(text) // the contents of the entry
|
||||
.setContentIntent(contentIntent) // The intent to send when the entry is clicked
|
||||
.build();
|
||||
|
||||
// Send the notification.
|
||||
//mNM.notify(NOTIFICATION, notification);
|
||||
startForeground(NOTIFICATION, notification);
|
||||
}
|
||||
}
|
|
@ -62,7 +62,6 @@ import android.content.Intent;
|
|||
import android.content.ServiceConnection;
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.PackageManager.NameNotFoundException;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources.Theme;
|
||||
|
@ -1589,34 +1588,34 @@ public class QtActivity extends Activity
|
|||
//@ANDROID-11
|
||||
//////////////// Activity API 12 /////////////
|
||||
|
||||
//@ANDROID-12
|
||||
@Override
|
||||
public boolean dispatchGenericMotionEvent(MotionEvent ev)
|
||||
{
|
||||
if (QtApplication.m_delegateObject != null && QtApplication.dispatchGenericMotionEvent != null)
|
||||
return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.dispatchGenericMotionEvent, ev);
|
||||
else
|
||||
return super.dispatchGenericMotionEvent(ev);
|
||||
}
|
||||
public boolean super_dispatchGenericMotionEvent(MotionEvent event)
|
||||
{
|
||||
return super.dispatchGenericMotionEvent(event);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
@Override
|
||||
public boolean onGenericMotionEvent(MotionEvent event)
|
||||
{
|
||||
if (QtApplication.m_delegateObject != null && QtApplication.onGenericMotionEvent != null)
|
||||
return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onGenericMotionEvent, event);
|
||||
else
|
||||
return super.onGenericMotionEvent(event);
|
||||
}
|
||||
public boolean super_onGenericMotionEvent(MotionEvent event)
|
||||
{
|
||||
return super.onGenericMotionEvent(event);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
//@ANDROID-12
|
||||
////@ANDROID-12
|
||||
// @Override
|
||||
// public boolean dispatchGenericMotionEvent(MotionEvent ev)
|
||||
// {
|
||||
// if (QtApplication.m_delegateObject != null && QtApplication.dispatchGenericMotionEvent != null)
|
||||
// return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.dispatchGenericMotionEvent, ev);
|
||||
// else
|
||||
// return super.dispatchGenericMotionEvent(ev);
|
||||
// }
|
||||
// public boolean super_dispatchGenericMotionEvent(MotionEvent event)
|
||||
// {
|
||||
// return super.dispatchGenericMotionEvent(event);
|
||||
// }
|
||||
// //---------------------------------------------------------------------------
|
||||
//
|
||||
// @Override
|
||||
// public boolean onGenericMotionEvent(MotionEvent event)
|
||||
// {
|
||||
// if (QtApplication.m_delegateObject != null && QtApplication.onGenericMotionEvent != null)
|
||||
// return (Boolean) QtApplication.invokeDelegateMethod(QtApplication.onGenericMotionEvent, event);
|
||||
// else
|
||||
// return super.onGenericMotionEvent(event);
|
||||
// }
|
||||
// public boolean super_onGenericMotionEvent(MotionEvent event)
|
||||
// {
|
||||
// return super.onGenericMotionEvent(event);
|
||||
// }
|
||||
// //---------------------------------------------------------------------------
|
||||
////@ANDROID-12
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue