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 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232
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;
	}
	
	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);
			 
		    }
		  }
	});
	
	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 243 244 245 246 247 248 249 250 251 252 253 254 255 256

	
	onAppTrimMemory((level:Number) => {
		let eventName = "onAppTrimMemory - " + level;
		onLifecycleChange(eventName);
	    console.log(eventName);
	});
	
	
	onAppConfigChange((ret:UTSJSONObject) => {
		let eventName = "onAppConfigChange - " + JSON.stringify(ret);
		onLifecycleChange(eventName);
	    console.log(eventName);
	});
	
	
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
    });

}