これに触れたいくつかのトピックが見つかりましたが、解決策は私のためには機能しませんでした。Android - 別のクラスで権限を確認
私はクラスPermissionsManager.java
に許可をチェックする方法が含まれており、MainActivity.java
で電話しています。コンテキストとアクティビティをcheckPermissions()
に渡す必要があると私は読んでいますが、アクセス許可がすでに与えられている場合はコンテキストが私のアプリケーションを許可しますが、許可が与えられていないとクラッシュします。適切なアクティビティを通過するのに問題がありました。
私はMainActivityにすべてのコードを入れることができました。私はそれがすべて動作して以来、そこで動作することを知っていますが、MVCパターンで自分のコードを設定して、
私は次のエラーを取得する:
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Context.checkPermission(java.lang.String, int, int)' on a null object reference
誰もがこの作業を取得する方法についていくつかの光を当てますか?
PermissionsManager
import android.Manifest;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.List;
/**
* Created on 5/6/2017.
*/
public class PermissionsManager extends AppCompatActivity {
final private int REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS = 124;
public void checkPermissions() {
List<String> permissionsNeeded = new ArrayList<String>();
final List<String> permissionsList = new ArrayList<String>();
if (!addPermission(permissionsList, Manifest.permission.READ_CONTACTS))
permissionsNeeded.add("Read Contacts");
if (!addPermission(permissionsList, Manifest.permission.SEND_SMS))
permissionsNeeded.add("Send SMS Texts");
if (!addPermission(permissionsList, Manifest.permission.RECEIVE_SMS))
permissionsNeeded.add("Receive SMS Texts");
if (!addPermission(permissionsList, Manifest.permission.READ_SMS))
permissionsNeeded.add("Read SMS Texts");
if (permissionsList.size() > 0) {
if (permissionsNeeded.size() > 0) {
// Need Rationale
String message = "This app requires the following permissions to function correctly: \n" + permissionsNeeded.get(0);
for (int i = 1; i < permissionsNeeded.size(); i++)
message = message + "\n" + permissionsNeeded.get(i);
showMessageOKCancel(message,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
}
}
});
return;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(permissionsList.toArray(new String[permissionsList.size()]),
REQUEST_CODE_ASK_MULTIPLE_PERMISSIONS);
}
return;
}
}
private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
new AlertDialog.Builder(this)
.setMessage(message)
.setPositiveButton("OK", okListener)
.setNegativeButton("Cancel", null)
.create()
.show();
}
private boolean addPermission(List<String> permissionsList, String permission) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
permissionsList.add(permission);
// Check for Rationale Option
if (!shouldShowRequestPermissionRationale(permission))
return false;
}
}
return true;
}
}
MainActivityのOnCreateメソッド
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
// Check Permissions
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
PermissionsManager permissionsManager = new PermissionsManager();
permissionsManager.checkPermissions();
}
}
私はこのようないくつかのコードを試してみましたが、それは私のために動作しませんでした。
if(ContextCompat.checkSelfPermission((Activity)mContext,Manifest.permission.REA
D_SMS)!=PackageManager.PERMISSION_GRANTED)
{
ActivityCompat.requestPermissions((Activity) mContext, new String[]{Manifest.permission.READ_SMS},
MY_PERMISSIONS_REQUEST_READ_SMS);
}
ありがとうございました。基本クラスのアイデアが働いた。今、私のMainActivityはうんざりしていません。そうです、MVCは正しいアイデアではありませんでした。私は勉強を続けなければならない。 –
こんにちは、@ CommonSWare可能であればこの質問をチェックしてください.. http://stackoverflow.com/questions/42968587/android-email-client-receiver-email-id-empty-in-android-parseありがとう –