Youtube看我Android应用程序意外关闭

Youtube看我Android应用程序意外关闭,第1张

概述我从 https://github.com/youtube/yt-watchme创建android应用程序. 当我尝试使用“CREATE LIVE EVENT”按钮创建事件时.它会抛出一些跟随错误.我认为这是由于相机许可问题而发生的. 错误: 09-17 11:43:53.582 32383-32383/com.google.android.apps.watchme E/AndroidRunti 我从 https://github.com/youtube/yt-watchme创建androID应用程序.

当我尝试使用“CREATE liVE EVENT”按钮创建事件时.它会抛出一些跟随错误.我认为这是由于相机许可问题而发生的.

错误:

09-17 11:43:53.582  32383-32383/com.Google.androID.apps.watchme E/AndroIDRuntime﹕ FATAL EXCEPTION: main    Process: com.Google.androID.apps.watchme,PID: 32383    java.lang.NoSuchMethodError: com.Google.androID.apps.watchme.StreamerActivity.checkSelfPermission            at com.Google.androID.apps.watchme.StreamerActivity.startStreaming(StreamerActivity.java:174)            at com.Google.androID.apps.watchme.StreamerActivity.access0(StreamerActivity.java:46)            at com.Google.androID.apps.watchme.StreamerActivity.onServiceConnected(StreamerActivity.java:63)            at androID.app.LoadedApk$Servicedispatcher.doConnected(LoadedApk.java:1110)            at androID.app.LoadedApk$Servicedispatcher$runconnection.run(LoadedApk.java:1127)            at androID.os.Handler.handleCallback(Handler.java:733)            at androID.os.Handler.dispatchMessage(Handler.java:95)            at androID.os.Looper.loop(Looper.java:136)            at androID.app.ActivityThread.main(ActivityThread.java:5097)            at java.lang.reflect.Method.invokeNative(Native Method)            at java.lang.reflect.Method.invoke(Method.java:515)            at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)            at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:601)            at dalvik.system.NativeStart.main(Native Method)

任何人请建议.我该如何解决这个问题.

提前致谢

代码更新:

清单文件XML

<manifest xmlns:androID="http://schemas.androID.com/apk/res/androID"    package="com.Google.androID.apps.watchme">    <uses-permission androID:name="androID.permission.INTERNET" />    <uses-permission androID:name="androID.permission.ACCESS_NETWORK_STATE" />    <!-- For authorization. -->    <uses-permission androID:name="androID.permission.GET_ACCOUNTS" />    <!-- For recording audio and vIDeo without going to lock. -->    <uses-permission androID:name="androID.permission.RECORD_AUdio" />    <uses-permission androID:name="androID.permission.WAKE_LOCK" />    <uses-permission androID:name="androID.permission."/>    <uses-permission androID:name="androID.permission.CAMERA" />    <uses-feature        androID:name="androID.harDWare.camera"        androID:required="true"></uses-feature>    <uses-feature        androID:name="androID.harDWare.camera.front"        androID:required="true"></uses-feature>    <application        androID:allowBackup="true"        androID:icon="@drawable/ic_launcher"        androID:label="@string/app_name"        androID:theme="@style/Apptheme">        <activity            androID:name="com.Google.androID.apps.watchme.MainActivity"            androID:configChanges="orIEntation|screenSize"            androID:label="@string/app_name">            <intent-filter>                <action androID:name="androID.intent.action.MAIN" />                <category androID:name="androID.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity            androID:name="com.Google.androID.apps.watchme.StreamerActivity"            androID:label="@string/app_name"            androID:screenorIEntation="landscape"></activity>        <service androID:name="com.Google.androID.apps.watchme.StreamerService" />    </application>    <uses-sdk        androID:minSdkVersion="23"        androID:targetSdkVersion="23"/></manifest>

流活动文件

/* * copyright (c) 2014 Google Inc. * * licensed under the Apache license,Version 2.0 (the "license"); you may not use this file except * in compliance with the license. You may obtain a copy of the license at * * http://www.apache.org/licenses/liCENSE-2.0 * * Unless required by applicable law or agreed to in writing,software distributed under the license * is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,either express * or implIEd. See the license for the specific language governing permissions and limitations under * the license. */package com.Google.androID.apps.watchme;import androID.Manifest;import androID.app.Activity;import androID.content.Componentname;import androID.content.Context;import androID.content.Intent;import androID.content.ServiceConnection;import androID.content.pm.PackageManager;import androID.harDWare.Camera;import androID.os.Bundle;import androID.os.IBinder;import androID.os.PowerManager;import androID.support.design.Widget.Snackbar;import androID.support.v4.app.ActivityCompat;import androID.util.Log;import androID.vIEw.VIEw;import androID.vIEw.VIEw.OnClickListener;import androID.Widget.Togglebutton;import com.Google.androID.apps.watchme.util.Utils;import com.Google.androID.apps.watchme.util.YouTubeAPI;import java.util.ArrayList;import java.util.List;/** * @author Ibrahim ulukaya <ulukaya@Google.com> *         <p/> *         StreamerActivity class which prevIEws the camera and streams via StreamerService. */public class StreamerActivity extends Activity {    // CONSTANTS    // Todo: Stop hardCoding this and read values from the camera's supported sizes.    public static final int CAMERA_WIDTH = 640;    public static final int CAMERA_HEIGHT = 480;    private static final int REQUEST_CAMERA_MICROPHONE = 0;    // Member variables    private StreamerService streamerService;    private ServiceConnection streamerConnection = new ServiceConnection() {        @OverrIDe        public voID onServiceConnected(Componentname classname,IBinder service) {            Log.d(MainActivity.APP_name,"onServiceConnected");            streamerService = ((StreamerService.LocalBinder) service).getService();            restoreStateFromService();            startStreaming();        }        @OverrIDe        public voID onServicedisconnected(Componentname classname) {            Log.e(MainActivity.APP_name,"onServicedisconnected");            // This should never happen,because our service runs in the same process.            streamerService = null;        }    };    private PowerManager.WakeLock wakeLock;    private PrevIEw prevIEw;    private String rtmpurl;    private String broadcastID;    @OverrIDe    public voID onCreate(Bundle savedInstanceState) {        Log.d(MainActivity.APP_name,"onCreate");        super.onCreate(savedInstanceState);        broadcastID = getIntent().getStringExtra(YouTubeAPI.broADCAST_ID_KEY);        //Log.v(MainActivity.APP_name,broadcastID);        rtmpurl = getIntent().getStringExtra(YouTubeAPI.RTMP_URL_KEY);        if (rtmpurl == null) {            Log.w(MainActivity.APP_name,"No RTMP URL was passed in; bailing.");            finish();        }        Log.i(MainActivity.APP_name,String.format("Got RTMP URL '%s' from calling activity.",rtmpurl));        setContentVIEw(R.layout.streamer);        prevIEw = (PrevIEw) findVIEwByID(R.ID.surfaceVIEwPrevIEw);        if (!bindService(new Intent(this,StreamerService.class),streamerConnection,BIND_auto_CREATE | BIND_DEBUG_UNBIND)) {            Log.e(MainActivity.APP_name,"Failed to bind StreamerService!");        }        final Togglebutton togglebutton = (Togglebutton) findVIEwByID(R.ID.togglebroadcasting);        togglebutton.setonClickListener(new OnClickListener() {            @OverrIDe            public voID onClick(VIEw v) {                if (togglebutton.isChecked()) {                    streamerService.startStreaming(rtmpurl);                } else {                    streamerService.stopStreaming();                }            }        });    }    @OverrIDe    protected voID onResume() {        Log.d(MainActivity.APP_name,"onResume");        super.onResume();        if (streamerService != null) {            restoreStateFromService();        }    }    @OverrIDe    protected voID onPause() {        Log.d(MainActivity.APP_name,"onPause");        super.onPause();        if (prevIEw != null) {            prevIEw.setCamera(null);        }        if (streamerService != null) {            streamerService.releaseCamera();        }    }    @OverrIDe    protected voID onDestroy() {        Log.d(MainActivity.APP_name,"onDestroy");        super.onDestroy();        if (streamerConnection != null) {            unbindService(streamerConnection);        }        stopStreaming();        if (streamerService != null) {            streamerService.releaseCamera();        }    }    private voID restoreStateFromService() {        prevIEw.setCamera(Utils.getCamera(Camera.CameraInfo.CAMERA_FACING_FRONT));    }    private voID startStreaming() {        Log.d(MainActivity.APP_name,"startStreaming");        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);        wakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK,this.getClass().getname());        wakeLock.acquire();        if (!streamerService.isstreaming()) {            String cameraPermission = Manifest.permission.CAMERA;            String microphonePermission = Manifest.permission.RECORD_AUdio;            int hasCamPermission = checkSelfPermission(cameraPermission);            int hasMicPermission = checkSelfPermission(microphonePermission);            List<String> permissions = new ArrayList<String>();            if (hasCamPermission != PackageManager.PERMISSION_GRANTED) {                permissions.add(cameraPermission);                if (ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.CAMERA)) {                    // ProvIDe rationale in Snackbar to request permission                    Snackbar.make(prevIEw,R.string.permission_camera_rationale,Snackbar.LENGTH_INDEFINITE).show();                } else {                    // Explain in Snackbar to turn on permission in settings                    Snackbar.make(prevIEw,R.string.permission_camera_explain,Snackbar.LENGTH_INDEFINITE).show();                }            }            if (hasMicPermission != PackageManager.PERMISSION_GRANTED) {                permissions.add(microphonePermission);                if (ActivityCompat.shouldShowRequestPermissionRationale(this,Manifest.permission.RECORD_AUdio)) {                    // ProvIDe rationale in Snackbar to request permission                    Snackbar.make(prevIEw,R.string.permission_microphone_rationale,R.string.permission_microphone_explain,Snackbar.LENGTH_INDEFINITE).show();                }            }            if (!permissions.isEmpty()) {                String[] params = permissions.toArray(new String[permissions.size()]);                ActivityCompat.requestPermissions(this,params,REQUEST_CAMERA_MICROPHONE);            } else {                // We already have permission,so handle as normal                streamerService.startStreaming(rtmpurl);            }        }    }    /**     * Callback received when a permissions request has been completed.     */    @OverrIDe    public voID onRequestPermissionsResult(int requestCode,String permissions[],int[] grantResults) {        switch (requestCode) {            case REQUEST_CAMERA_MICROPHONE: {                Log.i(MainActivity.APP_name,"Received response for camera with mic permissions request.");                // We have requested multiple permissions for contacts,so all of them need to be                // checked.                if (Utils.verifyPermissions(grantResults)) {                    // permissions were granted,yay! do the                    // streamer task you need to do.                    streamerService.startStreaming(rtmpurl);                } else {                    Log.i(MainActivity.APP_name,"Camera with mic permissions were NOT granted.");                    Snackbar.make(prevIEw,R.string.permissions_not_granted,Snackbar.LENGTH_SHORT)                            .show();                }                break;            }            // other 'switch' lines to check for other            // permissions this app might request        }        return;    }    private voID stopStreaming() {        Log.d(MainActivity.APP_name,"stopStreaming");        if (wakeLock != null) {            wakeLock.release();            wakeLock = null;        }        if (streamerService.isstreaming()) {            streamerService.stopStreaming();        }    }    public voID endEvent(VIEw vIEw) {        Intent data = new Intent();        data.putExtra(YouTubeAPI.broADCAST_ID_KEY,broadcastID);        if (getParent() == null) {            setResult(Activity.RESulT_OK,data);        } else {            getParent().setResult(Activity.RESulT_OK,data);        }        finish();    }}

更新错误代码:

08:57:14.447  18829-18829/com.Google.androID.apps.watchme E/AndroIDRuntime﹕ FATAL EXCEPTION: main    Process: com.Google.androID.apps.watchme,PID: 18829    java.lang.UnsatisfIEdlinkError: Couldn't load ffmpeg from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.Google.androID.apps.watchme-1.apk"],nativelibraryDirectorIEs=[/data/app-lib/com.Google.androID.apps.watchme-1,/vendor/lib,/system/lib]]]: findlibrary returned null            at java.lang.Runtime.loadlibrary(Runtime.java:358)            at java.lang.System.loadlibrary(System.java:526)            at com.Google.androID.apps.watchme.Ffmpeg.<clinit>(Ffmpeg.java:26)            at com.Google.androID.apps.watchme.VIDeoStreamingConnection.open(VIDeoStreamingConnection.java:71)            at com.Google.androID.apps.watchme.StreamerService.startStreaming(StreamerService.java:80)            at com.Google.androID.apps.watchme.StreamerActivity.startStreaming(StreamerActivity.java:212)            at com.Google.androID.apps.watchme.StreamerActivity.access0(StreamerActivity.java:47)            at com.Google.androID.apps.watchme.StreamerActivity.onServiceConnected(StreamerActivity.java:64)            at androID.app.LoadedApk$Servicedispatcher.doConnected(LoadedApk.java:1110)            at androID.app.LoadedApk$Servicedispatcher$runconnection.run(LoadedApk.java:1127)            at androID.os.Handler.handleCallback(Handler.java:733)            at androID.os.Handler.dispatchMessage(Handler.java:95)            at androID.os.Looper.loop(Looper.java:136)            at androID.app.ActivityThread.main(ActivityThread.java:5097)            at java.lang.reflect.Method.invokeNative(Native Method)            at java.lang.reflect.Method.invoke(Method.java:515)            at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)            at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:601)            at dalvik.system.NativeStart.main(Native Method)
解决方法 在调用发生的活动代码中,用一个检查包装它:

int hasCamPermission = checkSelfPermission(cameraPermission);int hasMicPermission = checkSelfPermission(microphonePermission);

首先将以下方法添加到StreamerActivity:

private boolean shouldCheckForPermission() {  return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;}

将这些行更改为:

int hasCamPermission = shouldCheckForPermission() ? checkSelfPermission(cameraPermission) : PackageManager.PERMISSION_GRANTED;int hasMicPermission = shouldCheckForPermission() ? checkSelfPermission(microphonePermission) : PackageManager.PERMISSION_GRANTED;

为此,您需要使用SDK 23进行编译和定位,如上面的答案中所述.

总结

以上是内存溢出为你收集整理的Youtube看我Android应用程序意外关闭全部内容,希望文章能够帮你解决Youtube看我Android应用程序意外关闭所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1125598.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存