Bu derste runtime permission için pratik bir yöntemi anlatıcam.
Mainactivtiy’i kodla doldurmadan oluşturduğumuz izinleri ele alan bir sınıf ile basit bir şekilde uygulamamız için izin alabileceğiz.
Oluşturduğumuz sınıfı uygulamalarınızda kolay bir şekilde kullanabilir ve gerekli izin isteme işlemlerini yapabilirsiniz.
Tüm uygulamayı indirmek için tıklayınız….
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
public class MainActivity extends RuntimeIzinlerActivity { private static final int ARAMA_YAP_REQUEST_CODE = 100; private static final int REHBERE_ERIS_REQUEST_CODE = 200; Button aramaYap, rehberiDegistir; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); aramaYap= (Button) findViewById(R.id.btnAramaYap); rehberiDegistir= (Button) findViewById(R.id.btnRehberDegistir); } @Override public void izinVerildi(int requestCode) { if(requestCode==ARAMA_YAP_REQUEST_CODE){ aramaYapmaIslemi(); } if(requestCode==REHBERE_ERIS_REQUEST_CODE){ rehbereErismeIslemi(); } } public void calistir(View view) { if(view.getId()==R.id.btnAramaYap){ String[] istenilenIzinler={Manifest.permission.CALL_PHONE}; MainActivity.super.izinIste(istenilenIzinler, ARAMA_YAP_REQUEST_CODE); } if(view.getId()==R.id.btnRehberDegistir){ String[] istenilenIzinler={Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_CONTACTS}; MainActivity.super.izinIste(istenilenIzinler, REHBERE_ERIS_REQUEST_CODE); } } public void aramaYapmaIslemi(){ Intent i=new Intent(Intent.ACTION_CALL); i.setData(Uri.parse("tel:123456789")); startActivity(i); } public void rehbereErismeIslemi(){ Toast.makeText(this, "rehbere erişme izinleri verilmiş", Toast.LENGTH_LONG).show(); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.net.Uri; import android.os.Bundle; import android.provider.Settings; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; public abstract class RuntimeIzinlerActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); } public void izinIste(final String[] istenilenIzinler, final int requestCode) { int izinKontrol = PackageManager.PERMISSION_GRANTED; boolean mazeretGoster = false; //izinkontrol=0 ise izin/izinler verilmiştir //aksi durumda izin/izinler verilmemiştir. //mazeret göster = false ise ilk defa izin sorulmustur //mazeret goster= true ise kullanıcı izni reddetmiştir, ona bir mazeret sunabiliriz. for (String izin : istenilenIzinler) { izinKontrol = izinKontrol + ContextCompat.checkSelfPermission(this, izin); mazeretGoster = mazeretGoster || ActivityCompat.shouldShowRequestPermissionRationale(this, izin); } if (izinKontrol != PackageManager.PERMISSION_GRANTED) { if (mazeretGoster) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Neden İzin Vermelisin?"); builder.setMessage("Arama yapmak istiyorsan bu izni vermen gerekiyor"); builder.setNegativeButton("IZIN YOK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builder.setPositiveButton("IZIN VERMEK ISTIYORUM", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { ActivityCompat.requestPermissions(RuntimeIzinlerActivity.this, istenilenIzinler, requestCode); } }); builder.show(); } else { ActivityCompat.requestPermissions(RuntimeIzinlerActivity.this, istenilenIzinler, requestCode); } } else { izinVerildi(requestCode); } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); int izinKontrol = PackageManager.PERMISSION_GRANTED; //izinkontrol=0 ise tüm izinler verilmiştir for (int izinDurumu : grantResults) { izinKontrol = izinKontrol + izinDurumu; } if ((grantResults.length > 0) && izinKontrol == PackageManager.PERMISSION_GRANTED) { izinVerildi(requestCode); } else { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("IZIN LAZIM"); builder.setMessage("Ayarladan tüm izinleri vermen gerekiyor"); builder.setNegativeButton("OLMAZ", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builder.setPositiveButton("IZIN VERICEM", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(); intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setData(Uri.parse("package:" + getPackageName())); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); startActivity(intent); } }); builder.show(); } } public abstract void izinVerildi(int requestCode); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.emrealtunbilek.runtimepermissionsinifi.MainActivity"> <Button android:id="@+id/btnAramaYap" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="13dp" android:layout_marginTop="11dp" android:onClick="calistir" android:text="Arama Yap" /> <Button android:id="@+id/btnRehberDegistir" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="13dp" android:layout_marginTop="11dp" android:onClick="calistir" android:text="Rehbere Eriş" /> </LinearLayout> |
üstad resme link verme nasıl oluyor. özetle şu şekil anlatayım; imageview ile resim ekleyip o resme tıklandığında sayfanın açılmasını istiyorum. Bununla ilgili bir çalışman var mı?
Görüntü;
http://i.hizliresim.com/2rENGE.png
Merhaba,
Aynı butonlara atandığı gibi imageviewlara da click event atayabilirsin. Imageviewe setonclick listener yazıp onun tıklanma methoduna yeni bir intent tanımlayarak farklı bir activity ya da service başlatabilirsin
peki o nasıl olur ?
üstad benim durumum aynen şu linkteki gibi: http://i.hizliresim.com/r3J3rM.png
sipariş vermek gibi olacak ama bununla ilgili bi video eğitim çekebilir misin ? en azından yeni başlayıp pratik bişi yapmak isteyenler için güzel kaynak olur diye düşünüyorum. internette ” android studio resme link verme” diye aratınca çıkmıyor bi bilgi. her resim farklı bir web sayfası açacak.
örneğin emrealtunbilek.com için düşünelim. ekrana 5-6 resim koyulacak.
1. Resim: Android – resme tıklandığında https://emrealtunbilek.com/android/ sayfasına gidecek
2. Resim: Java – resme tıklandığında https://emrealtunbilek.com/java
Sayfasına gidecek şekilde.
Resim iyiymiş:)
Kısaca anlatayım. Ekrana 5 farklı resim koydun diyelim. Ben sadece bir resim için anlatacam gerisini sen halledersin.
ImageView img = (ImageView) findViewById(R.id.resimBir);
img.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setData(Uri.parse(“https://emrealtunbilek.com”));
startActivity(intent);
}
});
İkinci resim için
ImageView img2 = (ImageView)findViewById(R.id.resimIki);
img2.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setData(Uri.parse(“http://youtube.com”));
startActivity(intent);
}
});
Umarım anlaşılmıştır….