Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何调用活动';从一个单独的类中删除方法_Java_Android - Fatal编程技术网

Java 如何调用活动';从一个单独的类中删除方法

Java 如何调用活动';从一个单独的类中删除方法,java,android,Java,Android,所以我一直在玩安卓M风格的权限,只要我在MainActivity中做任何事情,我就有一个可用的演示。我觉得它看起来很麻烦,想把它分成多个文件,这样看起来更干净,维护起来也更容易 问题是,通过将权限检查移动到它自己的文件中,我现在很难让权限检查器返回MainActivity并启动demo()方法。在PermissionsChecker.java的第73行和第114行,我需要调用main activities demo方法 package me.johnweland.androidrtp; imp

所以我一直在玩安卓M风格的权限,只要我在MainActivity中做任何事情,我就有一个可用的演示。我觉得它看起来很麻烦,想把它分成多个文件,这样看起来更干净,维护起来也更容易

问题是,通过将权限检查移动到它自己的文件中,我现在很难让权限检查器返回MainActivity并启动demo()方法。在PermissionsChecker.java的第73行和第114行,我需要调用main activities demo方法

package me.johnweland.androidrtp;

import android.Manifest;
import android.annotation.TargetApi;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.os.Build;


import java.util.ArrayList;

import java.util.List;


/**
 * Created by jweland on 12/11/2015.
 */
public class PermissionChecker {
    private static final String TAG = PermissionChecker.class.getSimpleName();
    final private int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 0;

    private MainActivity mainActivity;
    private static PermissionChecker instance = null;
    private PermissionChecker(MainActivity activity) {
        mainActivity = activity;
    }

    static public PermissionChecker getInstance(MainActivity activity) {
        if (instance == null) {
            instance = new PermissionChecker(activity);
            return instance;
        } else {
            return instance;
        }
    }

    @TargetApi(Build.VERSION_CODES.M)
    protected void permissionsCheck(){
        List<String> permissionsNeeded = new ArrayList<String>();

        final List<String> permissionsList = new ArrayList<String>();
        // Add permission check for any permission that is not NORMAL_PERMISSIONS
        if(!addPermission(permissionsList, Manifest.permission.RECORD_AUDIO))
            permissionsNeeded.add(mainActivity.getString(R.string.permission_microphone));
        if(!addPermission(permissionsList, Manifest.permission.CAMERA))
            permissionsNeeded.add(mainActivity.getString(R.string.permission_camera));

        if(permissionsList.size() > 0) {
            if(permissionsNeeded.size() > 0) {
                // Need Rationale
                String message = mainActivity.getString(R.string.permission_grant_message) + permissionsNeeded.get(0);
                for (int i = 1; i < permissionsNeeded.size(); i++)
                    message = message + "\n" +permissionsNeeded.get(i);
                showMessageOKCancel(message,
                        new DialogInterface.OnClickListener() {
                            @TargetApi(Build.VERSION_CODES.M)
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                mainActivity.requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
                                        REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
                            }
                        });
                return;
            }
                mainActivity.requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
                        REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
            return;
        }
        mainActivity.demo();
    }

    private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
        new AlertDialog.Builder(mainActivity)
                .setMessage(message)
                .setPositiveButton(R.string.dialog_ok_button_text, okListener)
                .setNegativeButton(R.string.dialog_cancel_button_text, null)
                .create()
                .show();
    }

    @TargetApi(Build.VERSION_CODES.M)
    private boolean addPermission(List<String> permissionsList, String permission) {
        if (mainActivity.checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
            permissionsList.add(permission);
            // Check for Rationale Option
            if (!mainActivity.shouldShowRequestPermissionRationale(permission))
                return false;
        }
        return true;
    }
}
注意:我关注Android权限 我也发现了这些问题&。我意识到这是危险的接近复制的前两个,他们让我接近,但我还没有完全能够得到它。如果有人能为我详细介绍一下,我对Java和Android还是相当陌生的

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest package="me.johnweland.androidrtp"
          xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- // Permissions -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.CAMERA" />

    <!-- // Features -->
    <uses-feature android:name="android.hardware.camera" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

MainActivity.java

package me.johnweland.androidrtp;

import android.Manifest;
import android.annotation.TargetApi;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity {
    final private int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (Build.VERSION.SDK_INT >= 23) {
            // Marshmallow+
            PermissionChecker permissions = PermissionChecker.getInstance(this);
            permissions.permissionsCheck();
        } else {
            // Pre-Marshmallow
            demo();
        }

    }

    @TargetApi(Build.VERSION_CODES.M)
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        switch (requestCode) {
            case REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS:
            {
                Map<String, Integer> perms = new HashMap<String, Integer>();
                // Initial
                perms.put(Manifest.permission.RECORD_AUDIO, PackageManager.PERMISSION_GRANTED);
                perms.put(Manifest.permission.CAMERA, PackageManager.PERMISSION_GRANTED);
                // Fill with results
                for (int i = 0; i < permissions.length; i++)
                    perms.put(permissions[i], grantResults[i]);
                // Check for RECORD_AUDIO
                if (perms.get(Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED
                        && perms.get(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
                    // All Permissions Granted
                    demo();
                }
                else {
                    // Permission Denied
                    Toast.makeText(this, R.string.permission_denied_message, Toast.LENGTH_SHORT).show();
                }
            }
            break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }

    protected void demo() {
        Toast.makeText(this, "Demo toast", Toast.LENGTH_LONG).show();
    }
}
包me.johnwelland.androidrtp;
导入android.Manifest;
导入android.annotation.TargetApi;
导入android.content.pm.PackageManager;
导入android.os.Build;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.widget.Toast;
导入java.util.HashMap;
导入java.util.Map;
公共类MainActivity扩展了AppCompatActivity{
最终私有整数请求\代码\请求\多个权限=0;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
如果(Build.VERSION.SDK_INT>=23){
//棉花糖+
PermissionChecker permissions=PermissionChecker.getInstance(此);
permissions.permissionsCheck();
}否则{
//前棉花糖
演示();
}
}
@TargetApi(Build.VERSION\u CODES.M)
public void onRequestPermissionsResult(int-requestCode、字符串[]权限、int[]grantResults){
开关(请求代码){
案例请求\代码\请求\多个权限:
{
Map perms=new HashMap();
//首字母
perms.put(Manifest.permission.RECORD_AUDIO,PackageManager.permission_provided);
perms.put(Manifest.permission.CAMERA,PackageManager.permission_provided);
//满载而归
for(int i=0;i
PermissionsChecker.java

package me.johnweland.androidrtp;

import android.Manifest;
import android.annotation.TargetApi;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.os.Build;


import java.util.ArrayList;

import java.util.List;


/**
 * Created by jweland on 12/11/2015.
 */
public class PermissionChecker {
    private static final String TAG = PermissionChecker.class.getSimpleName();
    final private int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 0;

    private MainActivity mainActivity;
    private static PermissionChecker instance = null;
    private PermissionChecker(MainActivity activity) {
        mainActivity = activity;
    }

    static public PermissionChecker getInstance(MainActivity activity) {
        if (instance == null) {
            instance = new PermissionChecker(activity);
            return instance;
        } else {
            return instance;
        }
    }

    @TargetApi(Build.VERSION_CODES.M)
    protected void permissionsCheck(){
        List<String> permissionsNeeded = new ArrayList<String>();

        final List<String> permissionsList = new ArrayList<String>();
        // Add permission check for any permission that is not NORMAL_PERMISSIONS
        if(!addPermission(permissionsList, Manifest.permission.RECORD_AUDIO))
            permissionsNeeded.add(mainActivity.getString(R.string.permission_microphone));
        if(!addPermission(permissionsList, Manifest.permission.CAMERA))
            permissionsNeeded.add(mainActivity.getString(R.string.permission_camera));

        if(permissionsList.size() > 0) {
            if(permissionsNeeded.size() > 0) {
                // Need Rationale
                String message = mainActivity.getString(R.string.permission_grant_message) + permissionsNeeded.get(0);
                for (int i = 1; i < permissionsNeeded.size(); i++)
                    message = message + "\n" +permissionsNeeded.get(i);
                showMessageOKCancel(message,
                        new DialogInterface.OnClickListener() {
                            @TargetApi(Build.VERSION_CODES.M)
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                mainActivity.requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
                                        REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
                            }
                        });
                return;
            }
                mainActivity.requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
                        REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
            return;
        }
        mainActivity.demo();
    }

    private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
        new AlertDialog.Builder(mainActivity)
                .setMessage(message)
                .setPositiveButton(R.string.dialog_ok_button_text, okListener)
                .setNegativeButton(R.string.dialog_cancel_button_text, null)
                .create()
                .show();
    }

    @TargetApi(Build.VERSION_CODES.M)
    private boolean addPermission(List<String> permissionsList, String permission) {
        if (mainActivity.checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
            permissionsList.add(permission);
            // Check for Rationale Option
            if (!mainActivity.shouldShowRequestPermissionRationale(permission))
                return false;
        }
        return true;
    }
}
包me.johnwelland.androidrtp;
导入android.Manifest;
导入android.annotation.TargetApi;
导入android.app.AlertDialog;
导入android.content.DialogInterface;
导入android.content.pm.PackageManager;
导入android.os.Build;
导入java.util.ArrayList;
导入java.util.List;
/**
*由jweland于2015年11月12日创建。
*/
公共类许可证检查器{
私有静态最终字符串标记=PermissionChecker.class.getSimpleName();
最终私有整数请求\代码\请求\多个权限=0;
私人活动;
私有静态PermissionChecker实例=null;
私人许可证检查器(主活动){
主要活动=活动;
}
静态公共权限检查器getInstance(MainActivity活动){
if(实例==null){
实例=新的PermissionChecker(活动);
返回实例;
}否则{
返回实例;
}
}
@TargetApi(Build.VERSION\u CODES.M)
受保护的无效许可证SCHECK(){
List permissions need=new ArrayList();
最终列表权限列表=新的ArrayList();
//为任何非正常权限添加权限检查\u权限
if(!addPermission(permissionsList,Manifest.permission.RECORD_AUDIO))
permissionseeded.add(mainActivity.getString(R.string.permission_));
if(!addPermission(permissionsList,Manifest.permission.CAMERA))
permissionseeded.add(mainActivity.getString(R.string.permission_-camera));
如果(permissionsList.size()>0){
如果(PermissionsNeed.size()>0){
//需要理由
String message=mainActivity.getString(R.String.permission\u grant\u message)+permissionsNeed.get(0);
对于(inti=1;i