index.uts 7.6 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 9
import Log from 'android.util.Log';
import Intent from 'android.content.Intent';
杜庆泉's avatar
杜庆泉 已提交
10

杜庆泉's avatar
杜庆泉 已提交
11
import logo from "../../static/logo.png";
杜庆泉's avatar
杜庆泉 已提交
12
import PackageManager from "android.content.pm.PackageManager";
杜庆泉's avatar
杜庆泉 已提交
13 14 15 16 17 18 19
import MediaStore from "android.provider.MediaStore";
import Bundle from "android.os.Bundle";
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
杜庆泉 已提交
20 21 22 23 24 25

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

34

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


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

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

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


87 88 89 90
/**
 * 实现一个添加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
杜庆泉 已提交
91 92 93 94
class AddUIRunnable extends Runnable {

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

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


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

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

    }
};

114 115 116 117
/**
 * 实现一个移除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
杜庆泉 已提交
118 119 120 121
class RemoveUIRunnable extends Runnable {

    override run():void {

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

    }
};

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

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


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



/**
 * 引用资源路径
 */
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;
}



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

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

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

杜庆泉's avatar
杜庆泉 已提交
195 196 197 198 199 200 201 202 203 204
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;
	}
	
杜庆泉's avatar
杜庆泉 已提交
205 206 207 208 209 210 211 212 213 214 215 216 217 218
	// 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
杜庆泉 已提交
219
			 
杜庆泉's avatar
杜庆泉 已提交
220 221 222
	// 	    }
	// 	  }
	// });
杜庆泉's avatar
杜庆泉 已提交
223 224 225 226 227 228 229 230 231 232
	
	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
杜庆泉 已提交
233 234


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

杜庆泉's avatar
杜庆泉 已提交
241 242

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

}