index.uts 9.4 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

杜庆泉's avatar
杜庆泉 已提交
19 20 21 22 23 24

import Toast from 'android.widget.Toast';
import AlertDialog from 'android.app.AlertDialog';
import DialogInterface from 'android.content.DialogInterface';
import EditText from 'android.widget.EditText';

杜庆泉's avatar
杜庆泉 已提交
25
import {
26 27 28
	UTSAndroid
} from "io.dcloud.uts";

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

30

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


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

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

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


83 84 85 86
/**
 * 实现一个添加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
 */
87
class AddUIRunnable implements Runnable {
杜庆泉's avatar
杜庆泉 已提交
88 89 90

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

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


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

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

    }
};

110 111 112 113
/**
 * 实现一个移除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
杜庆泉 已提交
114 115 116 117
class RemoveUIRunnable extends Runnable {

    override run():void {

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

    }
};

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

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

杜庆泉's avatar
杜庆泉 已提交
144 145 146 147 148 149 150


/**
 * 引用资源路径
 */
export function getMetaConfig(): string {
	//
151 152
	let packageName = UTSAndroid.getAppContext()!.getPackageName();
	let appInfo = UTSAndroid.getAppContext()!.getPackageManager()!.getApplicationInfo(packageName,PackageManager.GET_META_DATA)
杜庆泉's avatar
杜庆泉 已提交
153 154 155 156 157 158 159
	
	let metaData = appInfo.metaData
	if (metaData == null) {
		 return "";
	}
	let adId = metaData.getString("DCLOUD_READ_PHONE_STATE")
	if (adId == null) {
160 161 162 163 164 165
		// 没有数据,说明是自定义基座,则读取自定义基座的配置
		let customMetaId = metaData.getString("UTS_CUSTOM_LAUNCHER_META")
		if(customMetaId == null){
			return ""
		}
		return "自定义基座[UTS_CUSTOM_LAUNCHER_META]:" + customMetaId;
杜庆泉's avatar
杜庆泉 已提交
166
	}
167 168
	// 标准基座
    return "标准基座[DCLOUD_READ_PHONE_STATE]:" + adId;
杜庆泉's avatar
杜庆泉 已提交
169 170 171 172
}



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

打打卡夫卡's avatar
打打卡夫卡 已提交
180 181 182 183
/**
 * 音频播放器对象
 */
let globalPlayer:MediaPlayer| null = null;
184 185 186
/**
 * 播放asset资源中的音频
 */
杜庆泉's avatar
杜庆泉 已提交
187
export function playAssetAudio() {
杜庆泉's avatar
杜庆泉 已提交
188
	
189
	let assetManager = UTSAndroid.getAppContext()!.getAssets();
杜庆泉's avatar
杜庆泉 已提交
190
	let afd = assetManager.openFd("free.mp3");
打打卡夫卡's avatar
打打卡夫卡 已提交
191 192 193 194 195 196 197
	
	if(globalPlayer == null){
		globalPlayer = new MediaPlayer();
		globalPlayer!.setDataSource(afd.getFileDescriptor(),afd.getStartOffset(), afd.getLength());
		globalPlayer!.prepare();
		globalPlayer!.start();
	}
杜庆泉's avatar
杜庆泉 已提交
198 199 200
	
}

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

打打卡夫卡's avatar
打打卡夫卡 已提交
202 203 204 205 206 207 208 209 210 211 212 213
/**
 * 停止播放asset资源中的音频
 */
export function stopAssetAudio() {
	
	if(globalPlayer != null){
		globalPlayer!.stop();
		globalPlayer = null;
	}
	
}

杜庆泉's avatar
杜庆泉 已提交
214 215 216
export function goOtherActivity(imageDone: (event:string) => void):boolean {
	
	// 检查相关权限是否已经具备
217
	if (ActivityCompat.checkSelfPermission(UTSAndroid.getUniActivity()!, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
杜庆泉's avatar
杜庆泉 已提交
218
		// 不具备权限,申请权限,并且告知用户监听失败
219
		ActivityCompat.requestPermissions(UTSAndroid.getUniActivity()!, arrayOf(Manifest.permission.CAMERA), 1002)
杜庆泉's avatar
杜庆泉 已提交
220 221 222 223
		
		return false;
	}
	
224
	UTSAndroid.onAppActivityResult((requestCode: Int, resultCode: Int, data?: Intent) => {
225 226 227 228 229 230
		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;
231
			  let bitmapPath = UTSAndroid.getUniActivity()!.getExternalCacheDir()!.getPath() + "/photo.png"
232 233 234 235 236 237
			  console.log(bitmapPath);
			  try{
				  mImageBitmap.compress(Bitmap.CompressFormat.PNG,100,new FileOutputStream(bitmapPath))
			  }catch(e){
			  }
			  imageDone(bitmapPath);
杜庆泉's avatar
杜庆泉 已提交
238
			 
239 240 241
		    }
		  }
	});
杜庆泉's avatar
杜庆泉 已提交
242 243 244
	
	let takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
	//resolveActivity 返回可处理 Intent 的第一个 Activity 组件
245 246
	if (takePictureIntent.resolveActivity(UTSAndroid.getUniActivity()!.getPackageManager()) != null) {
		UTSAndroid.getUniActivity()!.startActivityForResult(takePictureIntent, 1001);
杜庆泉's avatar
杜庆泉 已提交
247 248 249 250 251
	}
	
	return true;
	
}
杜庆泉's avatar
杜庆泉 已提交
252 253


254 255 256 257
/**
 * 初始化应用生命周期监听
 * 
 */
杜庆泉's avatar
杜庆泉 已提交
258
export function initAppLifecycle(onLifecycleChange: (event:string) => void) {
杜庆泉's avatar
杜庆泉 已提交
259

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

261 262 263 264
	/**
	 * application 内存不足的回调函数
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onapptrimmemory
	 */
265
	UTSAndroid.onAppTrimMemory((level:Number) => {
266 267 268 269
		let eventName = "onAppTrimMemory - " + level;
		onLifecycleChange(eventName);
	    console.log(eventName);
	});
杜庆泉's avatar
杜庆泉 已提交
270
	
271 272 273 274
	/**
	 * application 状态改变的回调函数
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onAppConfigChange
	 */
275
	UTSAndroid.onAppConfigChange((ret:UTSJSONObject) => {
276 277 278 279
		let eventName = "onAppConfigChange - " + JSON.stringify(ret);
		onLifecycleChange(eventName);
	    console.log(eventName);
	});
杜庆泉's avatar
杜庆泉 已提交
280 281
	
	
282 283 284 285
	/**
	 * activity 销毁生命周期回调
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onappactivitydestroy
	 */
286
    UTSAndroid.onAppActivityDestroy(() => {
杜庆泉's avatar
杜庆泉 已提交
287
		let eventName = "onAppActivityDestroy";
杜庆泉's avatar
杜庆泉 已提交
288 289
		onLifecycleChange(eventName);
        console.log(eventName);
杜庆泉's avatar
杜庆泉 已提交
290
    });
杜庆泉's avatar
杜庆泉 已提交
291 292
	
	
293 294 295 296
	/**
	 * activity 失去焦点生命周期回调
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onappactivitypause
	 */
297
    UTSAndroid.onAppActivityPause(() => {
杜庆泉's avatar
杜庆泉 已提交
298
		let eventName = "onAppActivityPause" ;
杜庆泉's avatar
杜庆泉 已提交
299 300
		onLifecycleChange(eventName);
        console.log(eventName);
杜庆泉's avatar
杜庆泉 已提交
301
    });
302 303 304 305
	/**
	 * activity 得到焦点的周期回调
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onappactivityresume
	 */
306
    UTSAndroid.onAppActivityResume(() => {
杜庆泉's avatar
杜庆泉 已提交
307
		let eventName = "onAppActivityResume";
杜庆泉's avatar
杜庆泉 已提交
308 309
		onLifecycleChange(eventName);
        console.log(eventName);
杜庆泉's avatar
杜庆泉 已提交
310
    });
311 312 313 314
	/**
	 * activity 回退物理按键事件回调
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onappactivityback
	 */
315
    UTSAndroid.onAppActivityBack(() => {
杜庆泉's avatar
杜庆泉 已提交
316
		let eventName = "onAppActivityBack";
杜庆泉's avatar
杜庆泉 已提交
317 318
		onLifecycleChange(eventName);
        console.log(eventName);
杜庆泉's avatar
杜庆泉 已提交
319 320 321 322
    });

}

323 324 325 326 327 328 329 330 331 332

/**
 * 取消注册生命周期函数
 */
export function unRegLifecycle() {


	/**
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onapptrimmemory
	 */
333
	UTSAndroid.offAppTrimMemory();
334 335 336 337
	
	/**
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onAppConfigChange
	 */
338
	UTSAndroid.offAppConfigChange();
339 340 341 342
	
	/**
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onappactivitydestroy
	 */
343
    UTSAndroid.offAppActivityDestroy();
344 345 346 347
	
	/**
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onappactivitypause
	 */
348
    UTSAndroid.offAppActivityPause();
349 350 351 352
	
	/**
	 * 说明文档:https://uniapp.dcloud.net.cn/plugin/uts-plugin.html#onappactivityresume
	 */
353
    UTSAndroid.offAppActivityResume();
354 355 356
	/**
	 * activity 回退物理按键事件回调
	 */
357
    UTSAndroid.offAppActivityBack();
358 359

}