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

AndroidDay08四大組件之服務(wù)Service

拓展:

創(chuàng)新互聯(lián)公司一直秉承“誠(chéng)信做人,踏實(shí)做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個(gè)客戶多一個(gè)朋友!為您提供成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)頁(yè)設(shè)計(jì)、微信平臺(tái)小程序開(kāi)發(fā)、成都網(wǎng)站開(kāi)發(fā)、成都網(wǎng)站制作、成都軟件開(kāi)發(fā)、手機(jī)APP定制開(kāi)發(fā)是成都本地專(zhuān)業(yè)的網(wǎng)站建設(shè)和網(wǎng)站設(shè)計(jì)公司,等你一起來(lái)見(jiàn)證!

??Android之Service與IntentService的比較

???? ??http://blog.csdn.net/smile3670/article/details/7702521


保證服務(wù)不被殺死:

http://blog.csdn.net/mad1989/article/details/22492519? ? (提高優(yōu)先級(jí),服務(wù)死掉的時(shí)候發(fā)送廣播,重啟服務(wù))



? ??

1.什么是服務(wù)

?就把服務(wù)理解為在后臺(tái)長(zhǎng)期運(yùn)行但是沒(méi)有界面的Activity,因?yàn)镾ervice與Activity有很多相似的地方。

? ?1)啟動(dòng)一個(gè)activity或service都要通過(guò)Intent

? ?2) 如果想打開(kāi)一個(gè)activity/service,按是否返回?cái)?shù)據(jù),需要采用不同的方法。

??■服務(wù)的作用

????讓某些邏輯在后臺(tái)(長(zhǎng)期)執(zhí)行。

????服務(wù)可以結(jié)合廣播接收者碰撞出各種效果(看你的想像力了!)

2.進(jìn)程

    1. Foreground process 前臺(tái)進(jìn)程 ?相當(dāng)于Activity執(zhí)行了onResume方法 用戶正在操作頁(yè)面 前臺(tái)進(jìn)程的優(yōu)先級(jí)最高

    2. Visible process 可視進(jìn)程 相當(dāng)于Activity執(zhí)行了onPasue方法 ?用戶依然能看的見(jiàn)屏幕

    3. Service process 服務(wù)進(jìn)程 相當(dāng)于通過(guò)startservice方式開(kāi)啟了一個(gè)服務(wù) 在當(dāng)前進(jìn)程里面運(yùn)行

    4. Background process 后臺(tái)進(jìn)程 ?相當(dāng)于Activity執(zhí)行了onStop方法 ?用戶看不見(jiàn)頁(yè)面 但是注意Activity沒(méi)有執(zhí)行ondestroy方法?

    5. Empty process 空進(jìn)程 后臺(tái)沒(méi)有任何組件運(yùn)行 這個(gè)時(shí)候?qū)儆诳者M(jìn)程?

3.服務(wù)的創(chuàng)建和開(kāi)啟

? ■服務(wù)的創(chuàng)建:

????定義一個(gè)類(lèi)繼承Service,在清單文件里注冊(cè)這個(gè)類(lèi),<service>標(biāo)簽。

? ? ?

? ■服務(wù)的開(kāi)啟:

? ? ?服務(wù)的開(kāi)啟屬于Context里的方法,所以繼承了Context的類(lèi)Activity、Service或者是擁有Context對(duì)象的類(lèi)

? ?都可以開(kāi)啟一個(gè)服務(wù)(如廣播接收者的onReceive方法里有Context對(duì)象,所以廣播接收者也可以開(kāi)啟一個(gè)服務(wù))

? ?開(kāi)啟服務(wù)的方式有2種:startService和bindService。
? ? ?不同的方式開(kāi)啟的服務(wù),作用不同,服務(wù)的生命周期不同,服務(wù)需要復(fù)寫(xiě)的方法也不同,掌握

? ?這兩種開(kāi)啟服務(wù)的方式區(qū)別十分地重要。(********重點(diǎn)*********)

????如果想要服務(wù)長(zhǎng)期運(yùn)行,就用startService方法;如果想調(diào)用服務(wù)里的方法,就用bindService

? ?方法來(lái)開(kāi)啟服務(wù)。

????不同方式開(kāi)啟服務(wù)的生命周期圖:

? ? ?Android Day08四大組件之服務(wù)Service?

? ? ?1)startService方式開(kāi)啟服務(wù)

????????★當(dāng)用戶第一次調(diào)用start-service方法 服務(wù)會(huì)執(zhí)行onCreate、onStartCommand、onStart方法?

????????★當(dāng)用戶第二次調(diào)用start-service方法 服務(wù)只會(huì)走onStartCommand、onStart方法?

????????★服務(wù)一旦通過(guò)start-service方法開(kāi)啟后 服務(wù)就會(huì)在后臺(tái)長(zhǎng)期運(yùn)行 直到用戶手工停止或調(diào)用

? ? ?????? stopService方法停止,或者服務(wù)調(diào)用自身的stopSelf()方法。如下圖,手動(dòng)關(guān)閉service:

????????Android Day08四大組件之服務(wù)Service

???????★start開(kāi)啟服務(wù)代碼

????????????//啟動(dòng)服務(wù)
????????????????Intent?intent?=?new?Intent(this,CallService.class);
????????????????startService(intent);

? ??

? ? ?

? ? ?2)bindService方式開(kāi)啟服務(wù)? ?

????★第一次點(diǎn)擊按鈕?通過(guò)bindservice開(kāi)啟服務(wù)?服務(wù)只會(huì)走?onCreate?和?onbind方法

????★第二次點(diǎn)擊按鈕?通過(guò)bindservice開(kāi)啟服務(wù)??服務(wù)沒(méi)有反應(yīng)?

????★不求同時(shí)生?但求同時(shí)死??只的是Activity和服務(wù)之間,Activity一掛掉,bind方式開(kāi)啟的服務(wù)也會(huì)

???? ?隨之掛掉

????★服務(wù)只能解綁一次?多次解綁會(huì)報(bào)異常?

????★通過(guò)bindservice方式開(kāi)啟服務(wù)?在設(shè)置頁(yè)面找不到?他可以理解成是一個(gè)隱形的服務(wù)??

????★當(dāng)服務(wù)的onbind方法返回null的時(shí)候onServiceConnected方法不執(zhí)行?

??????

????▇bindservice方式調(diào)用服務(wù)方法里面的流程(**********重點(diǎn)**********)

????????(1)定義一個(gè)服務(wù) 在清單文件里面配置 ?在服務(wù)里面定義一個(gè)方法 ?

????????(2)Activity想調(diào)用服務(wù)里面的方法?

????????(3)在服務(wù)的內(nèi)部定義一個(gè)中間人對(duì)象(IBinder) 在這個(gè)實(shí)現(xiàn)類(lèi)里面可以間接的調(diào)用到服務(wù)里面的

????????? ?方法

????????(4)在onbind方法中把我們自己定義的這個(gè)中間人對(duì)象返回?

????????(5)當(dāng)Activity想調(diào)用服務(wù)里面方法的時(shí)候 ?先通過(guò)bindservice方法獲取中間人對(duì)象?

????????(6)通過(guò)我們獲取的中間人對(duì)象就可以間接調(diào)用到服務(wù)里面的方法了?

????????
? ? ? ? ?一般寫(xiě)在"中間人"對(duì)象(IBinder)里的方法,都是實(shí)現(xiàn)接口里的方法,再在方法里調(diào)用服

? ? ? ?務(wù)里定義的方法。

?????■綁定服務(wù)抽取接口

????????接口可以隱藏代碼內(nèi)部的細(xì)節(jié) 讓程序員暴露只想暴露的方法

????????實(shí)現(xiàn)步驟

????????(1)定義一個(gè)接口 把服務(wù)里面想暴露方法都定義在接口里 ?

????????(2)我們定義的這個(gè)中間人對(duì)象實(shí)現(xiàn)我們定義的這個(gè)接口?

????????(3)還是通過(guò)bindservice方式獲取我們中間人的對(duì)象

????????(4)還是通過(guò)中間人對(duì)象間接調(diào)用服務(wù)里面的方法

?

4.應(yīng)用1_電話竊聽(tīng)器案例(startService開(kāi)啟服務(wù)方式)

? ? 需求:手機(jī)一接聽(tīng)電話就把通話進(jìn)行錄音,保存起來(lái)。

? ? 實(shí)現(xiàn)思路:電話竊聽(tīng),肯定不希望用戶看到,所以不需要界面,那么竊聽(tīng)錄音的邏輯應(yīng)寫(xiě)在服務(wù)里。服務(wù)有了,

? ? ? ? ? 需要被開(kāi)啟,為了顯得應(yīng)用更智能一些,就定義一個(gè)廣播接收者來(lái)接收開(kāi)機(jī)廣播來(lái)開(kāi)啟服務(wù)了。

? ? 具體實(shí)現(xiàn)步驟:

? ? 1)定義電話竊聽(tīng)錄音邏輯的服務(wù)類(lèi)

????創(chuàng)建服務(wù)類(lèi)之后,按照好的編程習(xí)慣,立馬在清單里配置service標(biāo)簽。?

public?class?CallService?extends?Service?{
	private?MediaRecorder?recorder?=?null;
	@Override
	public?IBinder?onBind(Intent?arg0)?{
		return?null;
	}

	@Override
	public?void?onCreate()?{
		super.onCreate();
		//創(chuàng)建一個(gè)TelephonyManager對(duì)象
		//注意要強(qiáng)轉(zhuǎn)
		TelephonyManager?manager?=?(TelephonyManager)?this.getSystemService(this.TELEPHONY_SERVICE);
		
		//通過(guò)TelephonyManager來(lái)獲取通話的狀態(tài)?????????????????????/
		manager.listen(new?MyPoneListener(),?PhoneStateListener.LISTEN_CALL_STATE);	//注意常量是PhoneStateListener的常量。
	}
	
	
	//定義一個(gè)類(lèi)繼承PhoneListener
	private?class?MyPoneListener?extends?PhoneStateListener{
		
		
		//復(fù)寫(xiě)它的一個(gè)監(jiān)聽(tīng)通話狀態(tài)的方法
		@Override
		public?void?onCallStateChanged(int?state,?String?incomingNumber)?{
			//判斷狀態(tài)
			/*int?	CALL_STATE_IDLE?	Device?call?state:?No?activity.
			int?	CALL_STATE_OFFHOOK?	Device?call?state:?Off-hook.
			int?	CALL_STATE_RINGING?	Device?call?state:?Ringing.*/
			
			//代表空閑狀態(tài)
			if(state?==?TelephonyManager.CALL_STATE_IDLE)
			{
				System.out.println("結(jié)束錄音");
				if(recorder?!=?null)
				{
					?recorder.stop();
					?recorder.reset();???//?You?can?reuse?the?object?by?going?back?to?setAudioSource()?step
					?recorder.release();?//?Now?the?object?cannot?be?reused
				}
			}
			//接聽(tīng)狀態(tài)
			else?if(state?==?TelephonyManager.CALL_STATE_OFFHOOK)
			{
				System.out.println("開(kāi)始錄音");
				if(recorder?!=?null)
				{
					recorder.start();???//?Recording?is?now?started
				}
			}
			//響鈴狀態(tài)
			if(state?==?TelephonyManager.CALL_STATE_RINGING)
			{
				System.out.println("準(zhǔn)備錄音,創(chuàng)建錄音機(jī)。");
				recorder?=?new?MediaRecorder();
				//設(shè)置錄音錄制的是雙方的還是單方的。
				recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
				//設(shè)置錄音的保存格式3GP
				recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
				//設(shè)置錄音的編碼方式
				?recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
				//設(shè)置錄音的保存位置?
				?recorder.setOutputFile("/mnt/sdcard/record.mp3");
				?try?{
			????//準(zhǔn)備錄音?
					recorder.prepare();
				}?catch?(Exception?e)?{
					e.printStackTrace();
				}
			}

		}
	}
}

? ??2)定義廣播接收者來(lái)啟動(dòng)服務(wù)

????創(chuàng)建廣播接收者之后,按照好的編程習(xí)慣,立馬在清單里配置receiver標(biāo)簽,并配置好過(guò)濾器過(guò)濾開(kāi)機(jī)廣播。

public?class?BootReceiver?extends?BroadcastReceiver?{
	@Override
	public?void?onReceive(Context?context,?Intent?intent)?{
		//當(dāng)手機(jī)重啟后?開(kāi)啟服務(wù)?
		
		Intent?intent1?=?new?Intent(context,CallService.class);
		context.startService(intent1);
		
	}
}

? ??

? ??3)添加權(quán)限?

????像什么配置組件,添加權(quán)限能提前完成的東西就提前完成。

?????<!--?讀取電話狀態(tài)權(quán)限??-->
????????<uses-permission?android:name="android.permission.READ_PHONE_STATE"/>
????
?????<!--?錄音權(quán)限?-->
????????<uses-permission?android:name="android.permission.RECORD_AUDIO"/>
????
?????<!--?SD卡讀寫(xiě)權(quán)限?-->
????????<uses-permission?android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
?
?????<!--?開(kāi)機(jī)啟動(dòng)監(jiān)聽(tīng)?-->
????????<uses-permission?android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

?????

5.應(yīng)用2_百度音樂(lè)盒案例(start/bind混合開(kāi)啟服務(wù)方式)????

? ? 需求:在activity里定義播放、暫停、繼續(xù)3個(gè)功能按鈕,效果如下圖所示:

???Android Day08四大組件之服務(wù)Service? ?

? ? 實(shí)現(xiàn)思路:一般音樂(lè)播放軟件,在界面銷(xiāo)毀之后,音樂(lè)還能繼續(xù)在長(zhǎng)期運(yùn)行播放,所以音樂(lè)播放的邏輯應(yīng)該寫(xiě)在服

????? ? 務(wù)里,用startService方式開(kāi)啟服務(wù);點(diǎn)擊按鈕還要調(diào)用服務(wù)里的方法,那么又要用bindService方

????? ? 式開(kāi)啟服務(wù)。所以要以混合模式開(kāi)啟服務(wù)。

? ? 具體實(shí)現(xiàn)步驟:

? ? 1)服務(wù)相應(yīng)接口定義

?????//定義一個(gè)接口來(lái)暴露想暴露的方法????????
????????public?interface?Iservice?{
????????	public?abstract?void?callPlay();
????????	public?abstract?void?callPause();
????????	public?abstract?void?callRePlay();
????????}

? ?2)服務(wù)定義??

??????package?com.itheima.baidumusic;

????????import?java.io.IOException;
????????
????????import?android.app.Service;
????????import?android.content.Intent;
????????import?android.media.MediaPlayer;
????????import?android.net.Uri;
????????import?android.os.Binder;
????????import?android.os.IBinder;
????????
????????/**
?????????*?播放音樂(lè)的?Service?邏輯寫(xiě)在Service里,通過(guò)中間人對(duì)象返回。
?????????*?
?????????*?模板步驟:?1.寫(xiě)一個(gè)類(lèi)繼承Binder,也就是IBinder(接口)的子類(lèi)?,并實(shí)現(xiàn)接口,暴露想暴露的方法。?2.返回這個(gè)類(lèi)的對(duì)象?。
?????????*?
?????????*?@author?LENOVO
?????????*?
?????????*/
????????public?class?PlayService?extends?Service?{
????????	private?MediaPlayer?musicPlayer?=?null;
????????
????????	@Override
????????	public?IBinder?onBind(Intent?intent)?{
????????		System.out.println("onBind方法執(zhí)行了。。。。。。");
????????		musicPlayer?=?new?MediaPlayer();
????????		try?{
????????			musicPlayer.setDataSource("/mnt/sdcard/luanhong.mp3");
????????		}?catch?(Exception?e)?{
????????			e.printStackTrace();
????????		}
????????		return?new?MyBinder();
????????	}
????????
????????	//?定義播放音樂(lè)的方法
????????	public?void?play()?{
????????		System.out.println("播放音樂(lè)");
????????		try?{
????????			musicPlayer.prepare();
????????		}?catch?(Exception?e)?{
????????			e.printStackTrace();
????????		}
????????		musicPlayer.start();
????????	}
????????
????????	//?定義暫停音樂(lè)的方法
????????	public?void?pause()?{
????????		System.out.println("暫停播放");
????????		musicPlayer.pause();
????????	}
????????
????????	//?定義繼續(xù)音樂(lè)的方法
????????	public?void?rePlay()?{
????????		System.out.println("繼續(xù)播放");
????????		musicPlayer.start();
????????	}
????????
????????	//?定義一個(gè)Binder的子類(lèi)對(duì)象<中間人對(duì)象>
????????	public?class?MyBinder?extends?Binder?implements?Iservice?{
????????		@Override
????????		public?void?callPlay()?{
????????			play();
????????		}
????????
????????		@Override
????????		public?void?callPause()?{
????????			pause();
????????		}
????????
????????		@Override
????????		public?void?callRePlay()?{
????????			rePlay();
????????		}
????????
????????	}
????????}

? ?3)Activity里啟動(dòng)服務(wù)

??????public?class?MainActivity?extends?Activity?{
	//?定義與服務(wù)的連接
	private?MyConn?conn?=?null;

	//?自定義那個(gè)類(lèi)才會(huì)具有獨(dú)有的播放音樂(lè)的功能,直接聲明那個(gè)類(lèi)實(shí)現(xiàn)的接口,屬于多態(tài)。
	private?Iservice?serviceBinder?=?null;

	@Override
	protected?void?onCreate(Bundle?savedInstanceState)?{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		//?1.通過(guò)startService方法開(kāi)啟服務(wù)?為了讓音樂(lè)盒可以長(zhǎng)期的運(yùn)行,即按下回退鍵服務(wù)不會(huì)隨之一起銷(xiāo)毀。
		Intent?intent?=?new?Intent(this,?PlayService.class);
		startService(intent);

		conn?=?new?MyConn();
		//?2.通過(guò)bindService方法開(kāi)啟服務(wù)?為了調(diào)用服務(wù)里的方法
		bindService(intent,?conn,?BIND_AUTO_CREATE);

		//?3.在activity里的onDestroy方法里注銷(xiāo)綁定服務(wù)。
	}

	//?定義一個(gè)類(lèi)實(shí)現(xiàn)ServiceConnection接口
	private?class?MyConn?implements?ServiceConnection?{

		@Override
		public?void?onServiceConnected(ComponentName?name,?IBinder?service)?{
			//?注意要最終是要用Iservice的特有方法,所以要強(qiáng)轉(zhuǎn)成Iservice.
			System.out.println("綁定服務(wù)成功");
			serviceBinder?=?(Iservice)?service;
		}

		@Override
		public?void?onServiceDisconnected(ComponentName?name)?{
			System.out.println("綁定服務(wù)失敗");
		}

	}

	//?實(shí)現(xiàn)點(diǎn)擊按鈕的方法
	public?void?click(View?v)?{
		switch?(v.getId())?{
		case?R.id.bt_play:
			serviceBinder.callPlay();
			break;
		case?R.id.bt_pause:
			serviceBinder.callPause();
			break;
		case?R.id.bt_rePlay:
			serviceBinder.callRePlay();
			break;

		default:
			break;
		}
	}

	//?在activity里的onDestroy方法里注銷(xiāo)綁定服務(wù)
	@Override
	protected?void?onDestroy()?{
		//?解除綁定服務(wù)
		unbindService(conn);
		super.onDestroy();
	}

}

??????

6.AIDL

Android?Interface?Definition?Language??Android接口定義語(yǔ)言

本地服務(wù):??運(yùn)行在自己應(yīng)用(Android)里面的服務(wù)

遠(yuǎn)程服務(wù)?:?運(yùn)行在其他應(yīng)用(Android)里面的服務(wù)

作用: ?想解決的問(wèn)題就是進(jìn)程間通信,也就是調(diào)用其它進(jìn)程里的服務(wù)里的方法。

? AIDL 實(shí)現(xiàn)的步驟?

????(1) 在一個(gè)應(yīng)用里面定義一個(gè)服務(wù) 服務(wù)里面有一個(gè)方法 這個(gè)方法稱(chēng)為遠(yuǎn)程服務(wù)里面的方法

????(2)在這個(gè)服務(wù)里面定義中間人對(duì)象 ?定義接口iservice.java 把想暴露的方法定義在接口里

????(3)把iservice.java文件改成 aidl文件 ?注意aidl不支持public、abstract等修飾符

????(4)系統(tǒng)會(huì)自動(dòng)給我們生產(chǎn)一個(gè)iservice.java文件 stub extends IBinder imp iservie接口?

????(5)把我們定義的中間人對(duì)象直接繼承Stub

????(6)我想在另外一個(gè)應(yīng)用里面去調(diào)用這個(gè)服務(wù)里面的方法 要保證2個(gè)應(yīng)用使用的是同一個(gè)aidl文件

????(7)如何保證2 個(gè)應(yīng)用使用的是同一個(gè)aidl文件谷歌要求 ? 包名相同?

????(8)還是通過(guò)bindservice 方式去獲取到中間人對(duì)象?

????(9)注意獲取我們定義的中間人對(duì)象的方式不一樣了,在服務(wù)連接對(duì)象ServiceConnection里的onServiceConnected方法里通過(guò)

????????????????????stub 的一個(gè)靜態(tài)方法去獲取我們定義的中間人對(duì)象?Stub.asinterface(Ibinder obj);

????
AIDL的應(yīng)用場(chǎng)景:支付寶

▼用AIDL模擬調(diào)用支付寶服務(wù)里的服務(wù)方法: ??

? ?第1步: ?建立兩個(gè)應(yīng)用

????Android Day08四大組件之服務(wù)Service??

??第2步: ?模擬支付寶服務(wù)(實(shí)際上支付寶是很復(fù)雜的) ?

????★先定義AIDL(相當(dāng)于接口)?

?????定義AIDL之后,程序會(huì)自動(dòng)在gen目錄下生成相同包名相同文件名的java文件,可以看到Java

????文件中有一抽象類(lèi)Stub,既繼承了Binder類(lèi)又實(shí)現(xiàn)了IService接口。這就是為什么下面服

????務(wù)“中間人”是直接繼承Stub的原因。

Android Day08四大組件之服務(wù)Service???

????★定義支付寶服務(wù)

???? ?注意要為服務(wù)配一個(gè)過(guò)濾器,指定一個(gè)action,因?yàn)橹Ц秾毞?wù)要被另外一個(gè)應(yīng)用所調(diào)用,

????要用到隱式意圖,那么就必須配置一個(gè)過(guò)濾器。

?????????????<service?android:name="com.itheima.service.PayService"?>
????????????????<intent-filter>
????????????????????<action?android:name="com.itheima.MY_ALI_PAY"?/>
????????????????</intent-filter>
?????????????</service>

????? 定義支付寶服務(wù)

????/**
?????*?支付寶服務(wù)
?????*/
????public?class?PayService?extends?Service?{
????
????	@Override
????	public?IBinder?onBind(Intent?intent)?{
????		//?TODO?Auto-generated?method?stub
????		return?new?MyBinder();
????	}
????	
????	//定義一個(gè)支付的方法
????	public?boolean?Pay(String?username,String?password,double?money)
????	{
????		//邏輯
????		System.out.println("密碼加密。。。。。。。。。");
????		System.out.println("檢查手機(jī)有沒(méi)有病毒。。。。。。。。。");
????		System.out.println("判斷用戶名和密碼。。。。。。。。");
????		System.out.println("......");
????		
????		if(!(username.equals("root")?&&?password.equals("1234")))
????		{
????//			Toast.makeText(getApplicationContext(),"密碼錯(cuò)誤.....",?0).show();
????			System.out.println("sdggsgggs");
????			return?false;
????		}
????		if(money?<?4000)
????		{
????//			Toast.makeText(getApplicationContext(),"豆子數(shù)不足4000.....",?0).show();
????			System.out.println("QQQQQQQQQQQ");
????			return?false;
????		}
????		
????		return?true;
????	}
????	
????	
????	//定義一個(gè)中間人對(duì)象與調(diào)用本地服務(wù)不一樣,直接繼承Stub類(lèi)就可以了。
????	private?class?MyBinder?extends?Stub
????	{
????
????		@Override
????		public?boolean?callPay(String?username,?String?password,?double?money)
????				throws?RemoteException?{
????			return?Pay(username,?password,?money);
????		}
????	}
????}

????第3步: ?在另外一個(gè)應(yīng)用里調(diào)用支付寶服務(wù)

??????★?首先,將支付寶服務(wù)應(yīng)用的aidl拷貝過(guò)來(lái),并且包名要保持一致。

??????★?Activity調(diào)用支付寶服務(wù)的代碼:

public?class?MainActivity?extends?Activity?{?
????????//連接遠(yuǎn)程服務(wù)的連接對(duì)象???
????	private?MyConn?conn?=?null;
????	
????	//怎么才能將其它應(yīng)用的IService得到呢,使用AIDL技術(shù)。
????	private?IService?serviceBinder?=?null;
????	
????????@Override
????????protected?void?onCreate(Bundle?savedInstanceState)?{
????????????super.onCreate(savedInstanceState);
????????????setContentView(R.layout.activity_main);
????????????//綁定服務(wù)-----------------注意這個(gè)邏輯要寫(xiě)在onCreate方法里,因?yàn)樗枰欢ǖ臅r(shí)間。
????????	//由于是跨應(yīng)用訪問(wèn),要使用隱式意圖。
????????	Intent?intent?=?new?Intent();
????????	intent.setAction("com.itheima.MY_ALI_PAY");
????????	
????????	conn?=?new?MyConn();
????????	bindService(intent,?conn,?BIND_AUTO_CREATE);
????????}
????????
????????public?void?click(View?v)
????????{
????????	try?{
????			boolean?flag?=?serviceBinder.callPay("root",?"1234",?5000);	//空指針,沒(méi)有連接上。。。
????			if(flag)
????			{
????				System.out.println("支付成功");
????			}
????		}?catch?(RemoteException?e)?{
????			e.printStackTrace();
????		}	
????????		
????????}
????????
????????//定義一個(gè)類(lèi)實(shí)現(xiàn)ServiceConnection接口
????????public?class?MyConn?implements?ServiceConnection
????????{
????
????		@Override
????		public?void?onServiceConnected(ComponentName?name,?IBinder?service)?{
????			System.out.println("服務(wù)連接上了。。。。");
????			serviceBinder?=?Stub.asInterface(service);
????		}
????
????		@Override
????		public?void?onServiceDisconnected(ComponentName?name)?{
????			System.out.println("服務(wù)連接失敗。。。。");
????		}
????????	
????????}
????????
????????//解除綁定Service
????????@Override
????????protected?void?onDestroy()?{
????????	unbindService(conn);
????????	super.onDestroy();
????????}
????}

?

? ? ? 實(shí)際開(kāi)發(fā)中遇到的問(wèn)題:

? ? ?1.https://blog.csdn.net/sparklebirdie/article/details/50481343? ? ?(startCommand中的intent為null)

?????

  • 通知欄的使用

    1)自定義:https://blog.csdn.net/baidujiangwei18/article/details/51347601

    2)RemoteView異常:https://blog.csdn.net/qq_38320839/article/details/80402865

?????????其實(shí)RemoteView源碼注釋寫(xiě)的很清楚,限定了它的布局的View的種類(lèi)。

????? 3)9.0通知適配

?????????一般的創(chuàng)建通知欄的方法,發(fā)現(xiàn)在android9.0手機(jī)上不顯示。

? ? ? ? 》》創(chuàng)建Notification要增加渠道:

????????????? ?https://blog.csdn.net/zj2576688626/article/details/95340701

????????????? ?https://blog.csdn.net/qq_31392539/article/details/93799917

????????????????https://blog.csdn.net/big_sea_m/article/details/83824323

????????》》開(kāi)啟通知權(quán)限:(引導(dǎo)用戶到設(shè)置里開(kāi)啟)

????????????? ?http://www.manongjc.com/article/34177.html?(推薦)

????? ?????????https://www.jianshu.com/p/ddd2c0edbba9

? ?? ??

本文題目:AndroidDay08四大組件之服務(wù)Service
文章地址:http://www.chinadenli.net/article42/gpeshc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT移動(dòng)網(wǎng)站建設(shè)網(wǎng)站排名營(yíng)銷(xiāo)型網(wǎng)站建設(shè)品牌網(wǎng)站制作標(biāo)簽優(yōu)化

廣告

聲明:本網(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)