欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

android添加,android添加圖片資源

android 怎么添加按鈕

需要在資源文件中添加一個(gè)button,然后如果你需要給這個(gè)button增加點(diǎn)擊事件,那你就需要在代碼中找到這個(gè)button,給它添加點(diǎn)擊事件監(jiān)聽,在監(jiān)聽中響應(yīng)你所需要的完成的操作。

十年的閬中網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。全網(wǎng)營銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整閬中建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“閬中網(wǎng)站設(shè)計(jì)”,“閬中網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

Android系統(tǒng)手機(jī)如何添加桌面圖標(biāo)

Android系統(tǒng)手機(jī)添加桌面圖標(biāo)可以進(jìn)入菜單界面找到想要建立桌面快捷方式的程序,按住圖標(biāo)不放,感到一下震動(dòng)之后,圖標(biāo)即可移動(dòng),然后把圖標(biāo)拖動(dòng)到您想要擺放的位置就可以松手了(注意操作期間要按定圖標(biāo)不要放)。(上述內(nèi)容僅適用于廣東聯(lián)通用戶)

Android 添加android:name

在AndroidManifest中添加android:name

新建android:name對(duì)應(yīng)的class,并定義public方法繼承Application

如何在Android中添加系統(tǒng)服務(wù)

在android中添加系統(tǒng)服務(wù),下面以SurfaceComposer這個(gè)service為例,

① 首先提供接口文件ISurfaceComposer.h

//frameworks\native\include\gui\ISurfaceComposer.h

//首先是接口,c++實(shí)現(xiàn)是虛函數(shù)

class ISurfaceComposer: public IInterface {

public:

DECLARE_META_INTERFACE(SurfaceComposer);

// flags for setTransactionState()

enum {

eSynchronous = 0x01,

eAnimation = 0x02,

};

enum {

eDisplayIdMain = 0,

};

/* create connection with surface flinger, requires

* ACCESS_SURFACE_FLINGER permission

*/

virtual spISurfaceComposerClient createConnection() = 0;

}

② 建立BnSurfaceComposer

建立BnSurfaceComposer,需要重寫B(tài)Binder的onTransact函數(shù)。

class BnSurfaceComposer: public BnInterfaceISurfaceComposer {

public:

enum {

// Note: BOOT_FINISHED must remain this value, it is called from

// Java by ActivityManagerService.

BOOT_FINISHED = IBinder::FIRST_CALL_TRANSACTION,

CREATE_CONNECTION,

CREATE_GRAPHIC_BUFFER_ALLOC,

CREATE_DISPLAY_EVENT_CONNECTION,

CREATE_DISPLAY,

DESTROY_DISPLAY,

GET_BUILT_IN_DISPLAY,

SET_TRANSACTION_STATE,

AUTHENTICATE_SURFACE,

BLANK,

UNBLANK,

GET_DISPLAY_INFO,

CONNECT_DISPLAY,

CAPTURE_SCREEN,

};

virtual status_t onTransact(uint32_t code, const Parcel data,

Parcel* reply, uint32_t flags = 0);

};

③ Bpxxx的實(shí)現(xiàn)

frameworks\native\libs\gui\ISurfaceComposer.cpp中,

//Bp實(shí)現(xiàn),代理端

class BpSurfaceComposer : public BpInterfaceISurfaceComposer

{

public:

BpSurfaceComposer(const spIBinder impl)

: BpInterfaceISurfaceComposer(impl)

{

}

//代理接口

virtual spISurfaceComposerClient createConnection()

{

uint32_t n;

Parcel data, reply;

data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor());

remote()-transact(BnSurfaceComposer::CREATE_CONNECTION, data, reply);

return interface_castISurfaceComposerClient(reply.readStrongBinder());

}

}

④ Bnxxx的實(shí)現(xiàn)

//Bn端,即server端

status_t BnSurfaceComposer::onTransact(

uint32_t code, const Parcel data, Parcel* reply, uint32_t flags)

{

switch(code) {

case CREATE_CONNECTION: {

CHECK_INTERFACE(ISurfaceComposer, data, reply);

//createConnection就是server端的實(shí)現(xiàn)函數(shù)

spIBinder b = createConnection()-asBinder();

reply-writeStrongBinder(b);

return NO_ERROR;

}

default: {

return BBinder::onTransact(code, data, reply, flags);

}

}

// should be unreachable

return NO_ERROR;

}

⑤ 注冊(cè)service

通過上面幾步已經(jīng)完成了service的建立,我們需要將service注冊(cè)到service manager中。

class SurfaceFlinger : public BnSurfaceComposer,

//在frameworks\native\services\surfaceflinger\main_surfaceflinger.cpp中,

// publish surface flinger

spIServiceManager sm(defaultServiceManager());

sm-addService(String16(SurfaceFlinger::getServiceName()), flinger, false);

⑥ 使用service

//首先獲取代理端BpSurfaceComposer

spISurfaceComposer composer(ComposerService::getComposerService());

//直接調(diào)用代理BpSurfaceComposer的接口

spIGraphicBufferAlloc alloc(composer-createGraphicBufferAlloc());

其中g(shù)etComposerService()的實(shí)現(xiàn)為,

/*static*/ spISurfaceComposer ComposerService::getComposerService() {

ComposerService instance = ComposerService::getInstance();

Mutex::Autolock _l(instance.mLock);

if (instance.mComposerService == NULL) {

ComposerService::getInstance().connectLocked();

assert(instance.mComposerService != NULL);

ALOGD("ComposerService reconnected");

}

return instance.mComposerService;

}

void ComposerService::connectLocked() {

const String16 name("SurfaceFlinger");

//獲取service,返回的mComposerService是BpSurfaceComposer,有了Bp就能直接調(diào)用代理接口了

while (getService(name, mComposerService) != NO_ERROR) {

usleep(250000);

}

assert(mComposerService != NULL);

// Create the death listener.

class DeathObserver : public IBinder::DeathRecipient {

ComposerService mComposerService;

virtual void binderDied(const wpIBinder who) {

ALOGW("ComposerService remote (surfaceflinger) died [%p]",

who.unsafe_get());

mComposerService.composerServiceDied();

}

public:

DeathObserver(ComposerService mgr) : mComposerService(mgr) { }

};

mDeathObserver = new DeathObserver(*const_castComposerService*(this));

mComposerService-asBinder()-linkToDeath(mDeathObserver);

}

java添加service

Android為了方便開發(fā)人員,提供了AIDL工具,簡(jiǎn)化了編寫service的難度。下面以添加TestService這個(gè)服務(wù)為例,

① 編寫AIDL文件

package android.app;

interface ITestService {

boolean enableWifi(boolean enabled);

}

TestService的AIDL文件提供了一個(gè)接口,enableWifi()。

② 創(chuàng)建TestService服務(wù)

TestService 服務(wù)需要繼承ITestService.Stub類,這個(gè)類就是通過AIDL工具對(duì)①中的AIDL文件處理后產(chǎn)生的,

class TestService extends ITestService.Stub {

//實(shí)現(xiàn)接口

public boolean enableWifi(boolean enabled)

{

......

}

}

③ Context.java中添加service名字字符串

// Context.java中添加service名字字符串

public static final String TEST_SERVICE = "my_test";

④ 向ServiceManager中注冊(cè)service

java中大部分的系統(tǒng)service都是在SystemServer中去向service manager注冊(cè)的,

//ServiceManager注冊(cè)service

// 在SystemServer.java中,模仿其他向ServiceManager添加service的方法

try {

TestService myService = new TestService(context);

ServiceManager.addService(Context.TEST_SERVICE, myService);

} catch (Throwable e) {

reportWtf("register my test service fail", e);

}

⑤創(chuàng)建服務(wù)對(duì)應(yīng)的Manager

對(duì)于每一個(gè)service而言,通常會(huì)有一個(gè)相關(guān)的Manager。 Managers提供API給app使用,成為SDK的一部分,是apps和remote service的中間橋梁。Manager中的接口和Service中的接口必須一一對(duì)應(yīng)。

public class TestServiceManager{

private final ITestService mService;

private final Context mContext;

//構(gòu)造函數(shù)中傳入的service,其實(shí)就是BpTestService

TestServiceManager(Context context,ITestService service) {

mContext = context;

mService = service;

}

public boolean enableWifi(boolean enabled) {

try {

return mService.enableWifi(enabled);

} catch (RemoteException ex) {

}

return false;

}

}

到目前為止,我們只是完成了Service的注冊(cè),但是還沒有使用,該如何使用?

⑥ contextImpl中注冊(cè)Manager

一旦我們實(shí)現(xiàn)了service和對(duì)應(yīng)的Manager,需要有一種方法在app中調(diào)用他們。前面說過,Manager會(huì)成為SDK的一部分,供我們調(diào)用,那么Manager和Service是如何聯(lián)系起來的?首先需要將我們的service和mangager注冊(cè)到execution context,即contextImpl中,

registerService(TEST_SERVICE, new ServiceFetcher() {

public Object createService(ContextImpl ctx) {

IBinder b = ServiceManager.getService(TEST_SERVICE);

//asInterface(BpBinder)后就是BpTestService

ITestService service = ITestService.Stub.asInterface(b);

//創(chuàng)建TestServiceManager,第二個(gè)參數(shù)為BpBpTestService

return new TestServiceManager(ctx.getOuterContext(), service);

}});

registerService的第二個(gè)參數(shù)是一個(gè)ServiceFetcher對(duì)象,這里直接在調(diào)用時(shí),新建了一個(gè)ServiceFetcher類,重寫了createService方法。

ContextImpl.java中的registerService()方法,其核心就是把servicename和ServiceFetcher對(duì)象放到一個(gè)Hash的鍵值對(duì)中。

private static void registerService(String serviceName, ServiceFetcher fetcher) {

if (!(fetcher instanceof StaticServiceFetcher)) {

fetcher.mContextCacheIndex = sNextPerContextServiceCacheIndex++;

}

SYSTEM_SERVICE_MAP.put(serviceName, fetcher);

}

⑦ app如何使用service

那么app是如何調(diào)用的呢?

import android.app.TestServiceManager;

import android.content.Context;

TestServiceManager mTestServiceManager;

mTestServiceManager=(TestServiceManager)context.getSystemService(Context.TEST_SERVICE);

然后直接調(diào)用TestServiceManager中的方法即可,其中的奧秘需要分析下getSystemService函數(shù)。

ContextImpl.java中,

@Override

public Object getSystemService(String name) {

ServiceFetcher fetcher = SYSTEM_SERVICE_MAP.get(name);

//從ServiceFetcher 中獲取service

return fetcher == null ? null : fetcher.getService(this);

}

getService()函數(shù)的核心就是上面重寫的createService()函數(shù),返回的就是TestServiceManager對(duì)象,所以通過context.getSystemService返回的是Manager對(duì)象。

public Object getService(ContextImpl ctx) {

ArrayListObject cache = ctx.mServiceCache;

Object service;

synchronized (cache) {

if (cache.size() == 0) {

// Initialize the cache vector on first access.

// At this point sNextPerContextServiceCacheIndex

// is the number of potential services that are

// cached per-Context.

for (int i = 0; i sNextPerContextServiceCacheIndex; i++) {

cache.add(null);

}

} else {

service = cache.get(mContextCacheIndex);

if (service != null) {

return service;

}

}

//調(diào)用重載的createService函數(shù),返回的就是TestServiceManager對(duì)象

service = createService(ctx);

cache.set(mContextCacheIndex, service);

return service;

}

}

Android-添加新的語言支持(比如繁體)

這幾天突然要發(fā)一個(gè)中國臺(tái)灣版本,做法比較硬:復(fù)制一個(gè)工程,改包名,改圖標(biāo),改api接口。語言全部都是繁體就行:

Android studio添加新語言資源文件(res/values/....)如下:

然后回車即可:

把對(duì)應(yīng)的字符串翻譯成繁體就行。至于翻譯,有一些工具可以借鑒。同時(shí)網(wǎng)上也有很多多語言切換的方式,就是一個(gè)工程,一個(gè)app進(jìn)行內(nèi)部切換多語言支持的方式(像微信就是。不過微信繁體有些不一定都支持了...)。具體看情況啦。。。

因?yàn)槲覀兪钦麄€(gè)app就是中國臺(tái)灣臺(tái)北版本,所以就都是繁體,不管系統(tǒng)是簡(jiǎn)體還是繁體還是別的,就是繁體!!!

簡(jiǎn)單記錄下。好多東西沒怎么關(guān)注或者使用,至于是否要深入,可能要看情況....

參考o(jì): android--實(shí)現(xiàn)多語言支持 - snow_flower - 博客園

如何在Android系統(tǒng)添加聯(lián)系人

如您需要在Android系統(tǒng)手機(jī)上添加聯(lián)系人請(qǐng)進(jìn)入“聯(lián)系人”——“MENU”——“導(dǎo)入聯(lián)人”——“MENU——“全部導(dǎo)入”——Device 就把所有SIM上聯(lián)系人導(dǎo)入到設(shè)備上了。(上述內(nèi)容僅適用于廣東聯(lián)通用戶)

當(dāng)前名稱:android添加,android添加圖片資源
網(wǎng)頁鏈接:http://chinadenli.net/article10/dsijjgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)營銷型網(wǎng)站建設(shè)網(wǎng)站收錄外貿(mào)網(wǎng)站建設(shè)網(wǎng)站設(shè)計(jì)Google

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)