版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】如何用HMSNearbyService給自己的App添加近距離數(shù)據(jù)傳輸功能
/upload/information/20200717/160/6610.gif/upload/information/20200717/160/6611.png2.1開發(fā)準(zhǔn)備2.2聲明系統(tǒng)權(quán)限<!--
Required
for
Nearby
Discovery
and
Nearby
Transfer
-->
<uses-permission
android:name="android.permission.BLUETOOTH"
/>
<uses-permission
android:name="android.permission.BLUETOOTH_ADMIN"
/>
<uses-permission
android:name="android.permission.ACCESS_WIFI_STATE"
/>
<uses-permission
android:name="android.permission.CHANGE_WIFI_STATE"
/>
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION"
/>
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"
/>
<!--
Required
for
FILE
payloads
-->
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
/>2.3選擇策略Policy
policy
=
Policy.POLICY_STAR;
BroadcastOption
broadcastOption
=
new
BroadcastOption.Builder().setPolicy
(policy).build();2.4廣播和掃描2.4.1
啟動廣播private
void
doStartBroadcasting()
{
Policy
policy
=
Policy.POLICY_STAR;
BroadcastOption
broadcastOption
=
new
BroadcastOption.Builder().setPolicy(policy).build();
Nearby.getDiscoveryEngine(getApplicationContext())
.startBroadcasting(name,
serviceId,
connectCallback,
broadcastOption)
.addOnSuccessListener(
new
OnSuccessListener<Void>()
{
@Override
public
void
onSuccess(Void
aVoid)
{
/*
We
are
broadcasting.
*/
}
})
.addOnFailureListener(
new
OnFailureListener()
{
@Override
public
void
onFailure(Exception
e)
{
/*
Fail
to
start
broadcasting.
*/
}
});
}2.4.2
啟動掃描private
void
doStartScan()
{
Policy
policy
=
Policy.POLICY_STAR;
ScanOption
scanOption
=
new
ScanOption.Builder().setPolicy(policy).build();
Nearby.getDiscoveryEngine(getApplicationContext())
.startScan(serviceId,
scanEndpointCallback,
scanOption)
.addOnSuccessListener(
new
OnSuccessListener<Void>()
{
@Override
public
void
onSuccess(Void
aVoid)
{
/*
Start
scan
success.
*/
}
})
.addOnFailureListener(
new
OnFailureListener()
{
@Override
public
void
onFailure(Exception
e)
{
/*
Fail
to
start
scan.
*/
}
});
}private
ScanEndpointCallback
scanEndpointCallback
=
new
ScanEndpointCallback()
{
@Override
public
void
onFound(String
endpointId,
ScanEndpointInfo
discoveryEndpointInfo)
{
mEndpointId
=
endpointId;
mDiscoveryEngine.requestConnect(myNameStr,
mEndpointId,
mConnCb);
}
@Override
public
void
onLost(String
endpointId)
{
Log.d(TAG,
"Nearby
Connection
Demo
app:
Lost
endpoint:
"
+
endpointId);
}
};2.4.3
停止廣播2.4.4
停止掃描2.5建立連接2.5.1
請求連接private
void
doStartConnect(String
name,
String
endpointId)
throws
RemoteException
{
Nearby.getDiscoveryEngine(getApplicationContext())
.requestConnect(name,
endpointId,
connectCallback)
.addOnSuccessListener(
new
OnSuccessListener<Void>()
{
@Override
public
void
onSuccess(Void
aVoid)
{
/*
Request
success.
*/
}
})
.addOnFailureListener(
new
OnFailureListener()
{
@Override
public
void
onFailure(Exception
e)
{
/*
Fail
to
request
connect.
*/
}
});
}2.5.2
確認(rèn)連接private
final
ConnectCallback
connectCallback
=
new
ConnectCallback()
{
@Override
public
void
onEstablish(String
endpointId,
ConnectInfo
connectInfo)
{
/*
Accept
the
connection
request
without
notifying
user.
*/
Nearby.getDiscoveryEngine(getApplicationContext())
.acceptConnect(endpointId,
dataCallback);
}
@Override
public
void
onResult(String
endpointId,
ConnectResult
result)
{
switch
(result.getStatus().getStatusCode())
{
case
StatusCode.STATUS_SUCCESS:
/*
The
connection
was
established
successfully,
we
can
exchange
data.
*/
break;
case
StatusCode.STATUS_CONNECT_REJECTED:
/*
The
Connection
was
rejected.
*/
break;
default:
/*
other
unknown
status
code.
*/
}
}
@Override
public
void
onDisconnected(String
endpointId)
{
/*
The
connection
was
disconneted.
*/
}
};2.5.3
驗(yàn)證連接@Override
public
void
onEstablish(String
endpointId,
ConnectInfo
connectInfo)
{
AlertDialog.Builder
builder
=
new
AlertDialog.Builder(getApplicationContext());
builder.setTitle(connectInfo.getEndpointName()
+
"
request
connection")
.setMessage("Please
confirm
the
match
code
is:
"
+
connectInfo.getAuthCode())
.setPositiveButton(
"Accept",
(DialogInterface
dialog,
int
which)
->
/*
Accept
the
connection.
*/
Nearby.getDiscoveryEngine(getApplicationContext())
.acceptConnect(endpointId,
dataCallback))
.setNegativeButton(
"Reject",
(DialogInterface
dialog,
int
which)
->
/*
Reject
the
connection.
*/
Nearby.getDiscoveryEngine(getApplicationContext())
.rejectConnect(endpointId))
.setIcon(android.R.drawable.ic_dialog_alert);
AlertDialog
alert
=
builder.create();
alert.show();
}2.6傳輸數(shù)據(jù)2.6.1數(shù)據(jù)類型static
class
BytesDataReceiver
extends
DataCallback
{
@Override
public
void
onReceived(String
endpointId,
Data
data)
{
/*
BYTES
data
is
sent
as
a
single
block,
so
we
can
get
complete
data.
*/
if
(data.getType()
==
Data.Type.BYTES)
{
byte[]
receivedBytes
=
data.asBytes();
}
}
@Override
public
void
onTransferUpdate(String
endpointId,
TransferStateUpdate
update)
{
/*
We
will
receive
TRANSFER_STATE_SUCCESS
update
after
onReceived()
called.
*/
}
}File
fileToSend
=
new
File(getApplicationContext().getFilesDir(),
"fileSample.txt");
try
{
Data
fileData
=
Data.fromFile(fileToSend);
Nearby.getTransferEngine(getApplicationContext())
.sendData(endpointList,
fileData);
}
catch
(FileNotFoundException
e)
{
/*
Exception
handle.
*/
}ParcelFileDescriptor
pfd
=
getContentResolver().openFileDescriptor(uri,
"r");
Data
fileData
=
Data.fromFile(pfd);/*
We
can
get
the
received
file
in
the
Download
folder.
*/
File
payloadFile
=
fileData.asFile().asJava
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鉑合金漏板(坩堝)制造工風(fēng)險評估與管理測試考核試卷含答案
- 啤酒糖化工操作測試考核試卷含答案
- 2025年谷胱甘肽及酵母提取物項(xiàng)目發(fā)展計(jì)劃
- (一模)株洲市2026屆高三年級教學(xué)質(zhì)量統(tǒng)一檢測化學(xué)試卷(含答案)
- 2025年軋鋼導(dǎo)衛(wèi)裝置項(xiàng)目合作計(jì)劃書
- 2023年礦業(yè)開采模塊行業(yè)商業(yè)計(jì)劃報(bào)
- 2026年智能土壤 pH 值傳感器項(xiàng)目評估報(bào)告
- 2025年江蘇省淮安市中考英語真題卷含答案解析
- 環(huán)境污染控制技術(shù)
- 2025年人工智能技術(shù)知識普及試題及答案解析
- 特種工安全崗前培訓(xùn)課件
- 新疆維吾爾自治區(qū)普通高中2026屆高二上數(shù)學(xué)期末監(jiān)測試題含解析
- 2026屆福建省三明市第一中學(xué)高三上學(xué)期12月月考?xì)v史試題(含答案)
- 2026年遼寧金融職業(yè)學(xué)院單招職業(yè)技能測試題庫附答案解析
- (正式版)DB51∕T 3342-2025 《爐灶用合成液體燃料經(jīng)營管理規(guī)范》
- 2026北京海淀初三上學(xué)期期末語文試卷和答案
- 2024-2025學(xué)年北京市東城區(qū)五年級(上)期末語文試題(含答案)
- 人工智能在醫(yī)療領(lǐng)域的應(yīng)用
- 2025學(xué)年度人教PEP五年級英語上冊期末模擬考試試卷(含答案含聽力原文)
- 全國中學(xué)生數(shù)學(xué)建模競賽試題及答案
- LY/T 2482.2-2015東北、內(nèi)蒙古林區(qū)森林撫育技術(shù)要求第2部分:小興安嶺、完達(dá)山、張廣才嶺和老爺嶺林區(qū)
評論
0/150
提交評論