项目描述

1. image filter :

    项目描述:  Image filtering allows you to apply various effects on photos. after open the app, customer can pick a image from Sd card or 

internal phone storage and show up to app's interface. apply effects on image byClick on the slide's effects button.  save.

Challenges:

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

 you are working with limited memory, ideally you only want to load a lower resolution version in memory. The lower resolution version should match the size of the UI component that displays it

out of memory issue while loading an image to a Bitmap object and image filtering operation.

image 's Pixels is too large fro current phone's cpu me

 

Read Bitmap Dimensions and Type

Load a Scaled Down Version into Memory

  • Estimated memory usage of loading the full image in memory.
  • Amount of memory you are willing to commit to loading this image given any other memory requirements of your application.
  • Dimensions of the target ImageView or UI component that the image is to be loaded into.
  • Screen size and density of the current device.

 

 

2048

 

Fun and addictive mobile US Marine Rank version of 2048 game for Android!

 

Explore deep challenge for your mind!

 

-HOW TO PLAY-
Use your arrow keys to move the tiles. When two tiles with the same rank touch, they get promoted! Good luck! Credits to Fleet Admiral, and secret rank waiting for you.

 

Start play this 2048 game, compete with your friends to see who can make the best score.
Please give us feedback in comments, we will make it the best 2048 US Marine Rank game!
Start fun on 2048 puzzle!

 

scrambl3:

 android client side.  I implemented the vpn and srtp connection and monitoring, which was considered one of the most challenging components because Considering secret key authentication and network instability. and friend contact part inclulde presence status. message part.

 

 

 

 

most challenging1:

reason:   because the app need to build a vpn and srtp connection after the user login successful. In order to establish the two connection, customer need to download all client certificate keys. frsit vision of our app using theconventional methods to load key , customer need to download the pkcs12 file( storing all cryptography objects as a single file ) select PKCS12 File on the pop-up menu. 

 

 

action:

 first Vision We using a keychain class which is supported by google API. I decide to study how the keychain class work. and then I found out that. 

  1. Receive a callback from an KeyManager that a private key is requested.
  2. Call choosePrivateKeyAlias to allow the user to select from a list of currently available pkcs12 file(the file storing all key objects as a single file ). which is the user download.
  3. Call getPrivateKey and getCertificateChain fuction to retrieve the credentials .

SO I thought weather I could 

each user has his own pkcs12 file in our server. 

after the customer login in, using the user name and password to Fetching the p12 file from server, Extract useful  Two-dimensional bytes array format information according to pkcs12 file's structure. we. using the information create user's prevateKey, usercertificate. 

result:  

     Finally, the connection is fast and very stable. dont need download any files in the phone, more security due to no one can hacked the key from the phone directly.

 

 

most challenging2:

    I implemented the vpn and srtp connection and monitoring, which was considered one of the most challenging components because due to  network instability. one problem there

   Finally, the connection is fast and very stable. 

 

 

public class SipService extends Service{

bindService(intent,    mCharonVpnServiceConnection, Service.BIND_AUTO_CREATE);        
bindService(new Intent(this, VpnStateService.class), mServiceConnection, Service.BIND_AUTO_CREATE);
bindService(new Intent(this, SipStateService.class), SipmServiceConnection, Service.BIND_AUTO_CREATE);


    @Override
    public void stateChanged() {

        State lastState = state;
        
        state = mService.getState();
        ErrorState error = mService.getErrorState();
        ImcState imcState = mService.getImcState();
            
        switch (state) {
                
            case DISABLED:
                System.out.println("state SIP Service detected VPN status change to DISABLED.");
                break;

            case CONNECTING:
                System.out.println("state SIP Service detected VPN status change to CONNECTING.");
                break;
                
            case CONNECTED:
                System.out.println("state SIP Service detected VPN status change to CONNECTED.");
                if(lastState != State.CONNECTED)
                    getExecutor().execute(new RestartRunnable());                                                
                break;
                    
            case DISCONNECTING:
                System.out.println("state SIP Service detected VPN status change to DISCONNECTING.");
                if(lastState != State.DISCONNECTING)
                    getExecutor().execute(new StopRunnable());                                                
                break;
                    
            default:
                break;

        }
}


//observer parton 
public class SipStateService extends Service {
    
    
    private Handler mHandler;
    
    public int state;
    
    public final IBinder mBinder = new LocalBinder();
    
    public class LocalBinder extends Binder {
        public SipStateService getService() {
            return SipStateService.this;
        }
    }
    
    public ArrayList<SipStateListener> stateListeners = new ArrayList<SipStateListener>();

    public interface SipStateListener {
        public void SipStateChanged(int state, boolean first);
    }

    public void registerListener(SipStateListener listener) {
        stateListeners.add(listener);
        listener.SipStateChanged(state, true);
    }

    public void unregisterListener(SipStateListener listener) {
        stateListeners.remove(listener);
    }
    
    public void notifyListeners(final int state1)
    {
        state = state1;
        mHandler.post(new Runnable() {
            @Override
            public void run()
            {
                try
                {
                    
                        for (SipStateListener listener : stateListeners)
                        {
                            listener.SipStateChanged(state1, false);
                        }
                    
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                }
            }
        });
    }

    
    public IBinder onBind(Intent intent) {
        return mBinder;        
    }
    
    @Override
    public void onCreate() {
        System.out.println("sipstateservice oncreate");
        mHandler = new Handler();
        
    }
        
    @Override
    public void onDestroy() {
        super.onDestroy();
        System.out.println("exit presenceService onDestroy...");

        stopSelf();
                
    }
    
    public int getState(){
        return state;
    }
    
    
}

 

 

 

hardest bug:

conflicts with teammate 

    

转载于:https://www.cnblogs.com/leetcode/p/4064138.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值