index.uts 7.8 KB
Newer Older
杜庆泉's avatar
杜庆泉 已提交
1 2 3 4 5
import Color from "android.graphics.Color";
import TextView from "android.widget.TextView";
import FrameLayout from "android.widget.FrameLayout";
import ViewGroup from "android.view.ViewGroup";
import Gravity from "android.view.Gravity";
杜庆泉's avatar
杜庆泉 已提交
6 7
import Runnable from 'java.lang.Runnable';
import MediaPlayer from 'android.media.MediaPlayer';
杜庆泉's avatar
杜庆泉 已提交
8
import Intent from 'android.content.Intent';
杜庆泉's avatar
杜庆泉 已提交
9

杜庆泉's avatar
杜庆泉 已提交
10
import logo from "../../static/logo.png";
杜庆泉's avatar
杜庆泉 已提交
11
import PackageManager from "android.content.pm.PackageManager";
杜庆泉's avatar
杜庆泉 已提交
12 13 14 15 16 17
import MediaStore from "android.provider.MediaStore";
import ActivityCompat from "androidx.core.app.ActivityCompat";
import Manifest from "android.Manifest";
import Activity from "android.app.Activity";
import Bitmap from "android.graphics.Bitmap";
import FileOutputStream from "java.io.FileOutputStream";
杜庆泉's avatar
杜庆泉 已提交
18 19 20 21 22 23

import {
    onAppActivityDestroy,
    onAppActivityPause,
    onAppActivityResume,
    onAppActivityBack,
杜庆泉's avatar
杜庆泉 已提交
24 25 26 27
	onAppActivityStop,
	onAppActivityResult,
	onAppTrimMemory,
	onAppConfigChange,
杜庆泉's avatar
杜庆泉 已提交
28 29 30 31
	getUniActivity,
	getAppContext
} from "io.dcloud.uts.android";

32

杜庆泉's avatar
杜庆泉 已提交
33 34 35
/**
 * 定时任务参数封装
 */
杜庆泉's avatar
杜庆泉 已提交
36
type TimerOptions = {
37 38 39 40 41 42 43 44 45 46
	/**
	 * 定时任务开始的回调
	 * @res 回调参数
	 */
	start: (res: string) => void;
	/**
	* 定时任务执行的回调
	* @res 回调参数
	*/
	work: (res: string) => void;
杜庆泉's avatar
杜庆泉 已提交
47 48 49
};


杜庆泉's avatar
杜庆泉 已提交
50 51 52
/**
 * 执行延时任务
 */
杜庆泉's avatar
杜庆泉 已提交
53 54 55 56 57 58 59 60 61
export function doTimerTask(opts:TimerOptions) {
	opts.start('doTimerTask start');
	setTimeout(function() {
		opts.work("doTimerTask work");
	}, 2000);
  
  return { name: "doTimerTask" };
}

杜庆泉's avatar
杜庆泉 已提交
62 63 64
/**
 * 执行周期任务
 */
杜庆泉's avatar
杜庆泉 已提交
65 66
export function doIntervalTask(opts:TimerOptions) {
	
杜庆泉's avatar
杜庆泉 已提交
67
	let taskRet = setInterval(function() {
杜庆泉's avatar
杜庆泉 已提交
68 69 70 71 72 73 74
		opts.work("doIntervalTask work");
	}, 2000);
	opts.start('doIntervalTask start');
  
  return { name: "doIntervalTask",taskId:taskRet};
}

杜庆泉's avatar
杜庆泉 已提交
75 76 77
/**
 * 清除周期任务
 */
杜庆泉's avatar
杜庆泉 已提交
78 79 80
export function clearIntervalTask(taskId:number) {
	
	clearInterval(taskId);
81
	return { name: "clearIntervalTask"};
杜庆泉's avatar
杜庆泉 已提交
82 83 84
}


85 86 87 88
/**
 * 实现一个添加view的 Runnable类
 * 用法说明:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#%E5%8C%BF%E5%90%8D%E5%86%85%E9%83%A8%E7%B1%BB
 */
杜庆泉's avatar
杜庆泉 已提交
89 90 91 92
class AddUIRunnable extends Runnable {

    override run():void {
		
杜庆泉's avatar
杜庆泉 已提交
93 94 95
        let textView = new TextView(getUniActivity())
        textView.setText("HELLO WORLD");
        textView.textSize = 30.0.toFloat();
杜庆泉's avatar
杜庆泉 已提交
96
        textView.setBackgroundColor(Color.RED)
杜庆泉's avatar
杜庆泉 已提交
97 98
        textView.setTag("helloText")
        textView.setGravity(Gravity.CENTER)
杜庆泉's avatar
杜庆泉 已提交
99

杜庆泉's avatar
杜庆泉 已提交
100
        let decorView = getUniActivity()!.window.decorView;
杜庆泉's avatar
杜庆泉 已提交
101 102


杜庆泉's avatar
杜庆泉 已提交
103
        let frameContent = decorView.findViewById<FrameLayout>(android.R.id.content)
杜庆泉's avatar
杜庆泉 已提交
104
        let layoutParam = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);
杜庆泉's avatar
杜庆泉 已提交
105 106
        layoutParam.topMargin = 200;

杜庆泉's avatar
杜庆泉 已提交
107
        frameContent.addView(textView,layoutParam)
杜庆泉's avatar
杜庆泉 已提交
108 109 110 111

    }
};

112 113 114 115
/**
 * 实现一个移除view的 Runnable类
 * 用法说明:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#%E5%8C%BF%E5%90%8D%E5%86%85%E9%83%A8%E7%B1%BB
 */
杜庆泉's avatar
杜庆泉 已提交
116 117 118 119
class RemoveUIRunnable extends Runnable {

    override run():void {

杜庆泉's avatar
杜庆泉 已提交
120
        let decorView = getUniActivity()!.getWindow().getDecorView();
杜庆泉's avatar
杜庆泉 已提交
121
        let frameContent = decorView.findViewById<FrameLayout>(android.R.id.content)
杜庆泉's avatar
杜庆泉 已提交
122 123 124
		
		let targetTV = frameContent.findViewWithTag<TextView>("helloText")
		frameContent.removeView(targetTV)
杜庆泉's avatar
杜庆泉 已提交
125 126 127 128

    }
};

129 130 131 132
/**
 * 实现添加view实例至decorview
 * 
 */
杜庆泉's avatar
杜庆泉 已提交
133
export function addViewToDecorView() {
杜庆泉's avatar
杜庆泉 已提交
134
    let uiRunable = new AddUIRunnable();
杜庆泉's avatar
杜庆泉 已提交
135 136 137
    getUniActivity()!.runOnUiThread(uiRunable)

}
138 139 140
/**
 * 实现从decorview上移除指定view
 */
杜庆泉's avatar
杜庆泉 已提交
141
export function removeViewToDecorView() {
杜庆泉's avatar
杜庆泉 已提交
142
    var uiRunable = new RemoveUIRunnable();
杜庆泉's avatar
杜庆泉 已提交
143 144 145 146
    getUniActivity()!.runOnUiThread(uiRunable)
}


杜庆泉's avatar
杜庆泉 已提交
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170



/**
 * 引用资源路径
 */
export function getMetaConfig(): string {
	//
	let packageName = getAppContext()!.getPackageName();
	let appInfo = getAppContext()!.getPackageManager()!.getApplicationInfo(packageName,PackageManager.GET_META_DATA)
	
	let metaData = appInfo.metaData
	if (metaData == null) {
		 return "";
	}
	let adId = metaData.getString("DCLOUD_READ_PHONE_STATE")
	if (adId == null) {
		 return "";
	}
    return adId;
}



171 172 173
/**
 * 引用资源路径
 */
杜庆泉's avatar
杜庆泉 已提交
174 175 176 177
export function getLogoPath(): string {
  return logo;
}

178 179 180
/**
 * 播放asset资源中的音频
 */
杜庆泉's avatar
杜庆泉 已提交
181
export function playAssetAudio() {
杜庆泉's avatar
杜庆泉 已提交
182
	
杜庆泉's avatar
杜庆泉 已提交
183 184 185
	let assetManager = getAppContext()!.getAssets();
	let afd = assetManager.openFd("free.mp3");
	let mediaPlayer = new MediaPlayer();
杜庆泉's avatar
杜庆泉 已提交
186 187 188 189 190 191
	mediaPlayer.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength());
	mediaPlayer.prepare();
	mediaPlayer.start();
	
}

杜庆泉's avatar
杜庆泉 已提交
192

杜庆泉's avatar
杜庆泉 已提交
193 194 195 196 197 198 199 200 201 202
export function goOtherActivity(imageDone: (event:string) => void):boolean {
	
	// 检查相关权限是否已经具备
	if (ActivityCompat.checkSelfPermission(getUniActivity()!, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
		// 不具备权限,申请权限,并且告知用户监听失败
		ActivityCompat.requestPermissions(getUniActivity()!, arrayOf(Manifest.permission.CAMERA), 1002)
		
		return false;
	}
	
203 204 205 206 207 208 209 210 211 212 213 214 215 216
	onAppActivityResult((requestCode: Int, resultCode: Int, data?: Intent) => {
		let eventName = "onAppActivityResult  -  requestCode:" + requestCode + " -resultCode:"+resultCode + " -data:"+JSON.stringify(data);
	    console.log(eventName);
		if ((requestCode == 1001) && (resultCode == Activity.RESULT_OK)) {
		    if (data != null) {    
			  let bundle = data.getExtras(); 
			  let mImageBitmap = bundle!.get("data") as Bitmap;
			  let bitmapPath = getUniActivity()!.getExternalCacheDir()!.getPath() + "/photo.png"
			  console.log(bitmapPath);
			  try{
				  mImageBitmap.compress(Bitmap.CompressFormat.PNG,100,new FileOutputStream(bitmapPath))
			  }catch(e){
			  }
			  imageDone(bitmapPath);
杜庆泉's avatar
杜庆泉 已提交
217
			 
218 219 220
		    }
		  }
	});
杜庆泉's avatar
杜庆泉 已提交
221 222 223 224 225 226 227 228 229 230
	
	let takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
	//resolveActivity 返回可处理 Intent 的第一个 Activity 组件
	if (takePictureIntent.resolveActivity(getUniActivity()!.getPackageManager()) != null) {
		getUniActivity()!.startActivityForResult(takePictureIntent, 1001);
	}
	
	return true;
	
}
杜庆泉's avatar
杜庆泉 已提交
231 232


233 234 235 236
/**
 * 初始化应用生命周期监听
 * 
 */
杜庆泉's avatar
杜庆泉 已提交
237
export function initAppLifecycle(onLifecycleChange: (event:string) => void) {
杜庆泉's avatar
杜庆泉 已提交
238

杜庆泉's avatar
杜庆泉 已提交
239

240 241 242 243 244 245 246 247 248
	/**
	 * application 内存不足的回调函数
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onapptrimmemory
	 */
	onAppTrimMemory((level:Number) => {
		let eventName = "onAppTrimMemory - " + level;
		onLifecycleChange(eventName);
	    console.log(eventName);
	});
杜庆泉's avatar
杜庆泉 已提交
249
	
250 251 252 253 254 255 256 257 258
	/**
	 * application 状态改变的回调函数
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onAppConfigChange
	 */
	onAppConfigChange((ret:UTSJSONObject) => {
		let eventName = "onAppConfigChange - " + JSON.stringify(ret);
		onLifecycleChange(eventName);
	    console.log(eventName);
	});
杜庆泉's avatar
杜庆泉 已提交
259 260
	
	
261 262 263 264
	/**
	 * activity 销毁生命周期回调
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onappactivitydestroy
	 */
杜庆泉's avatar
杜庆泉 已提交
265
    onAppActivityDestroy(() => {
杜庆泉's avatar
杜庆泉 已提交
266
		let eventName = "onAppActivityDestroy";
杜庆泉's avatar
杜庆泉 已提交
267 268
		onLifecycleChange(eventName);
        console.log(eventName);
杜庆泉's avatar
杜庆泉 已提交
269
    });
杜庆泉's avatar
杜庆泉 已提交
270 271
	
	
272 273 274 275
	/**
	 * activity 失去焦点生命周期回调
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onappactivitypause
	 */
杜庆泉's avatar
杜庆泉 已提交
276
    onAppActivityPause(() => {
杜庆泉's avatar
杜庆泉 已提交
277
		let eventName = "onAppActivityPause" ;
杜庆泉's avatar
杜庆泉 已提交
278 279
		onLifecycleChange(eventName);
        console.log(eventName);
杜庆泉's avatar
杜庆泉 已提交
280
    });
281 282 283 284
	/**
	 * activity 得到焦点的周期回调
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onappactivityresume
	 */
杜庆泉's avatar
杜庆泉 已提交
285
    onAppActivityResume(() => {
杜庆泉's avatar
杜庆泉 已提交
286
		let eventName = "onAppActivityResume";
杜庆泉's avatar
杜庆泉 已提交
287 288
		onLifecycleChange(eventName);
        console.log(eventName);
杜庆泉's avatar
杜庆泉 已提交
289
    });
290 291 292 293
	/**
	 * activity 回退物理按键事件回调
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onappactivityback
	 */
杜庆泉's avatar
杜庆泉 已提交
294
    onAppActivityBack(() => {
杜庆泉's avatar
杜庆泉 已提交
295
		let eventName = "onAppActivityBack";
杜庆泉's avatar
杜庆泉 已提交
296 297
		onLifecycleChange(eventName);
        console.log(eventName);
杜庆泉's avatar
杜庆泉 已提交
298 299 300 301
    });

}