標籤

2019年10月4日 星期五

app中使用youtube的黑科技

黑科技對資訊人來說就好像武功密笈一樣
正規的教科書跟本就不會教這些

在進入這主題前,先聲明一下

不要用來幫 youtube 的影片 衝 觀看次數 人氣
Google 一定會發現,然後再把那個 yotuber 停權關掉

「心存善念,才能發揮黑科技的力量,而不會被黑暗吞噬掉

youtube上面有好多資源 ,最多人感興趣及每天都會使用的大概就是用來聽歌了

但是 Google 提供 youtube這個平台,就是要賺廣告費

所以要想在 手機背景聽歌 ,這是很多人的需求,但是 youtube就是想辦法不讓你這樣做
因為你就不會看到廣告了

那有沒有可能 用 app 包裝 youtube ,然後實現這個需求呢?

有的,就正規技術上來說,youtube允許你用它的 api來開發
但當它無預警的升級改版,你可能一夕之間又不能用
api要申請帳號,限制又多,一不小心超過免費的額度又可能每月被扣款

mb3就是使用 youtube的海量歌曲,成為很受歡迎的app
但是它仍然無法實現離線聽歌,背景聽歌等實用的功能

於是我嚐試不用 api 來開發測試
經過小小的努力,成功了

最簡單的做法,就是在 app 中,包裝網頁瀏覽器,然後再開啟 網站版的 youtube

想法很簡單,但實際包裝時,就遇上一些問題

android 和 iOS 要分別用不同的作法來達成

android 的作法


1.在畫面佈置的地方,選用 webview 元件來配置



2.在 程式開始處,也就是 onCreate() 里面,加入宣告,並指定 youtube 網址
我 mark 起來的地方,就是我若 使用 gl=tw 那個 也是不行的喔
直接用 "https://www.youtube.com/" 就對了

*****
要加上下面這行喔,不然就會跳離app了

ytwv.setWebViewClient(new WebViewClient() {
    @Override    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        return false;
    }
});

*****
加這行是為了,不需要用手去點,就能播歌
WebSettings webSettings = ytwv.getSettings();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
    webSettings.setMediaPlaybackRequiresUserGesture(false);
}



3.加這行是為了不被廣告檔住,不然一進youtube, 整個畫面幾乎就被廣告佔據了



這時執行app應該就能,在app內用youtube搜尋,點播歌曲了

如果app有需要畫面空間做其他的事,可將 youtube 的畫面隱藏起來,歌照樣能聽喔

ytwv.setVisibility(View.GONE);

**********************************

iPhone的作法




iOS有二種網頁元件,記得採用舊版的元件,才能播放youtube 喔


    ytweb= [[UIWebView alloc] initWithFrame:CGRectMake(0.0, 220.0, 320.0, 320.0)];
    ytweb.scrollView.scrollEnabled=YES;
    yt_url=@"https://www.youtube.com/";
    [self.view addSubview:ytweb];
    ytweb.allowsInlineMediaPlayback = YES;
    [ytweb loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:[yt_url  stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]]];


可將 youtube 的畫面隱藏起來,歌照樣能聽喔
  
  ytweb.hidden=true;

為了一開始不被廣告檔住, 可以指定位移


        if (ytweb.hidden) {
            ytweb.hidden=false;
            ytweb.scrollView.contentOffset = CGPointMake(0, 320);
        }
        else {
            ytweb.hidden=true;

        }

好了,這樣就可以在你的app中包裝入 youtube

直接用youtube就能搜尋,播歌了,然後又不影響你app的運作

如果想在app中實現下載 youtube成為mp3的歌曲,然後出國時省頻寬,離線聽歌的話
也辦的到,但需要另外一些技巧
以python 解析 youtube 搜尋結果
再整合 youtube-dl 來下載 影片提取音源,
最後 再以 ffmpeg 把 webm格式,轉為 mp3格式

當歌曲下載為mp3之後,純背景,不開手機畫面就能聽歌就成理所當然的事了。



2019年10月3日 星期四

測速照相偵測app用android 10的模擬器來測試



開發類導航的app時,以前一定要真機路測
現在最後發佈前雖然也要做真機路測,但開發過程中
使用模擬器可帶來不少方便

android最近發佈了 android Q (10)
因為修改了不少隱私權的設定,尤其像是手機座標的取得權限
Pixel 是Google的手機,搶先有搭載,但網上已傳出不少災情

很多app在android 9用的好好的,升級到android Q就閃退,或不正常

但升級是必然的,只能提前因應了

但我手上的Samsung S9+,搭載 android 9是沒辦法測的呀
Pixel也不便宜,還好在這時候發現
最新版的android 開發工具 android studio 3.5版 搭載 android Q模擬器

非常棒的提供了 行車路線座標 模擬,用法像Goggle Map
可以定出出發點及終點,然後找出行車路線
更貼心的是可以提供各種車速的模擬,可以極高速來開
節省測試時間
我這次測試是從三芝國中到淺水灣海水浴場,短短4公里開車只要7分鐘的路,
就有三支測速相機,非假日時,車少路大,很容易超速

請上 app store 搜尋 測速照測偵測 ,下載
android版本 https://play.google.com/store/apps/details?id=tendy.SpeedCamera

iPhone版本 https://apps.apple.com/tw/app/測速照相偵測/id503779276





2019年10月1日 星期二

想開發iOS13的app,但xcode卻無法更新 (Mac明明可用空間還有48G),找到解決方法了

經過一番整理後,清出了可用空間48G , 但後面有備註 (30G 可清除)
問題就出在這可清除的空間,仍然佔據著硬碟,所以還是無法安裝



所以要想辦法,把它清除掉

這些可清除的檔 是因為 時光機 在本機的 快照檔

打開終端機 先用這道指令,找出所有的快照檔
sudo tmutil listlocalsnapshots /



然後再下這指令 將之刪除 就可以了 (記得日期要換成上面指令所列出的日期) 

sudo tmutil deletelocalsnapshots 2019-09-30-162912